如何让Delphi TWebbrowser组件在IE9模式下运行?
由于TWebbrowser在IE7兼容模式下运行,我在TWebbrowser中遇到Javascript错误 有没有办法防止这种情况,让它在IE9模式下运行如何让Delphi TWebbrowser组件在IE9模式下运行?,delphi,twebbrowser,Delphi,Twebbrowser,由于TWebbrowser在IE7兼容模式下运行,我在TWebbrowser中遇到Javascript错误 有没有办法防止这种情况,让它在IE9模式下运行 选择加入该网站 根据您选择的浏览器模拟设置,您可能需要确保文档包含合适的DOCTYPE。同样,这在中进行了描述 因此,例如,如果您希望进行最简单的更改,您可以添加以下注册表设置: HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Int
9999
的文档说明:
9999Windows Internet Explorer 9。网页以IE9标准模式显示,而不考虑!DOCTYPE指令
如果要使用9000
,则还需要修改文档的DOCTYPE:
9000Internet Explorer 9。包含基于标准的网页!DOCTYPE指令以IE9模式显示。Internet Explorer 9的默认值
链接文档还包括指定其他IE版本所需的信息。包括在html中,“http equiv=“X-UA-Compatible”content=“IE=edge”
你的代码。。。。
将此类添加到代码中:
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;
结束
然后将以下内容添加到表单的OnCreate中:
TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(TBrowserEmulationAdjuster.IE11_Quirks);
这是所有永久的
可能不考虑依赖于IE的正确版本的可能的复制品,通过使用像嵌入的铬(查找DCEF)之类的东西。@ThijsvanDien:这一点很好,但使用DCEF时,您必须提供外部DLL,这并不总是需要的。TY.此解决方案有效。对于64位操作系统上的32位应用程序,您需要在…SOFTWARE\Wow6432Node\Microsoft\…下添加条目。这是正确的。除非您使用的HKCU\SOFTWARE
没有单独的32位和64位视图。O当然,如果您在安装程序中添加了设置,那么注册表重定向器将为您完成这项工作并重定向到32位视图。假设您的32位程序安装了32位安装程序。虽然有点离题,但仍然与您相关:如果您使用TwebBrowser,此网站可能会对您有很大帮助:@DavidHeffernan我建议使用updateing在回答中提供有关如何确保TwebBrowser以最新仿真模式运行(例如IE11)的信息因为这似乎是Delphi中最常见的关于TWebBrowser和仿真模式问题的答案。我知道这个问题是专门针对IE9仿真提出的,但是否真的需要有人提出一个关于TWebBrowser IE11仿真模式的新问题,这个问题的答案几乎相同,只有不同的需要用于实现IE11仿真的DWORD值中的ncemode@DavidHeffernan另一方面,当其他人在他们的答案中链接到异地资源时,你经常抱怨。此外,SO的目的不是提供常见问题的答案,而不是指向如何获得这些答案?请注意,此元标记必须是e头部分中的第一个标记和
也必须设置。
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;
TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(TBrowserEmulationAdjuster.IE11_Quirks);