如何拥有德尔福TWebbrowser组件运行在IE9模式?

问题描述 投票:11回答:3

我遇到了TWebbrowser Javascript错误归因于TWebbrowser在IE7兼容模式下运行的事实。

是否有办法防止这种情况,只是有它在IE9模式下运行?

delphi twebbrowser
3个回答
11
投票
  1. 选择加入browser emulation feature using the documented registry key
  2. 根据浏览器设置仿真您选择,您可能需要确保您的文档包含一个合适的DOCTYPE。再次,这是在documentation说明。

因此,举例来说,如果你希望做一个最简单的变化,你会添加以下注册表设置:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     YourExeNameGoesHere.exe = (DWORD) 00009999

该值9999文档说:

9999次的Windows Internet Explorer 9的网页显示在IE9标准模式,而不管!DOCTYPE指令。

是你使用9000那么你还需要修改文档的DOCTYPE:

9000次是Internet Explorer 9包含基于标准!​​DOCTYPE指令的网页显示在IE9模式。对于Internet Explorer 9的默认值。

链接的文件还包括指定其它IE版本所需要的信息。


5
投票

包括在HTML中, “HTTP-当量=” X-UA-兼容”内容= “IE =边缘”

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body> 
                your code ....
</body>
</html>

3
投票

这个类添加到您的代码:

type TBrowserEmulationAdjuster = class
  private
      class function GetExeName(): String; inline;
   public const
      // Quelle: https://msdn.microsoft.com/library/ee330730.aspx, Stand: 2017-04-26
      IE11_default   = 11000;
      IE11_Quirks    = 11001;
      IE10_force     = 10001;
      IE10_default   = 10000;
      IE9_Quirks     = 9999;
      IE9_default    = 9000;
      /// <summary>
      /// Webpages containing standards-based !DOCTYPE directives are displayed in IE7
      /// Standards mode. Default value for applications hosting the WebBrowser Control.
      /// </summary>
      IE7_embedded   = 7000;
   public
      class procedure SetBrowserEmulationDWORD(const value: DWORD);
end platform;

class function TBrowserEmulationAdjuster.GetExeName(): String;
begin
    Result := TPath.GetFileName( ParamStr(0) );
end;

class procedure TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(const value: DWORD);
const registryPath = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
    registry:   TRegistry;
    exeName:   String;
begin
    exeName := GetExeName();

    registry := TRegistry.Create(KEY_SET_VALUE);
    try
       registry.RootKey := HKEY_CURRENT_USER;
       Win32Check( registry.OpenKey(registryPath, True) );
       registry.WriteInteger(exeName, value)
    finally
       registry.Destroy();
    end;

结束;

然后添加到您的窗体的OnCreate中:

TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(TBrowserEmulationAdjuster.IE11_Quirks);

那是永远都

© www.soinside.com 2019 - 2024. All rights reserved.