2

有人可以提供有关 HTML/CSS 标准的 TWebBrowser 组件的一些背景知识吗?我很困惑为什么尽管我使用的是安装了 IE 8 的 Windows 7,但在 IE8 中显示 HTML 文件时与在 TWebBrowser 中显示相同的 HTML 文件时看到的结果不同。例如,当在 TWebBrowser (Delphi 7) 中查看 HTML 文件时,CSS 文件中的伪元素p:before和被完全忽略,但在 IE8 中查看相同的 HTML 文件时它们会被尊重。p:first-letter

SHDOCVW.DLL 是否可能太旧以至于我影响到 IE3 渲染?我试图弄清楚为什么 IE8 经常呈现 HTML 与使用 TWebBrowser 时所得到的有很大不同。

4

1 回答 1

4

默认情况下,IE8 在 IE7 标准模式下呈现在 WebBrowser 控件实例中运行的页面。您看到的差异是基于 IE8 和 IE7 标准的差异。

当可执行文件加载 WebBrowser 控件的实例时,它会扫描注册表以检查可执行文件是否需要 IE7 标准或 IE8 标准模式。

IE8 中的 WebBrowser 控件呈现模式(已弃用) IE8 中的
WebBrowser 控件呈现模式(更新)

要在 IE7 标准模式下运行 WebBrowser 控件,请将以下值插入注册表:

[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] 
"MyApplication.exe" = dword 7000 (Hex: 0x1B58)

要在 IE8 标准模式下运行,请插入以下注册表值:

 [(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] 
"MyApplication.exe" = dword 8000 (Hex: 0x1F40)

在这两种情况下,应将 MyApplication.exe 替换为将在指定模式下运行 WebBrowser 控件的可执行文件的名称。


说了这么多,您可以避免一起摆弄注册表。

托管在 WebBrowser 控件中的页面可以通过使用X-UA-Compatible元标记来指定呈现模式来覆盖呈现设置。

例如,要强制 IE8 TWebBrowser 控件以 IE8 标准呈现站点,请使用:

<META http-equiv="X-UA-Compatible" content="IE=8">

这可以通过主机头或作为每个文档的编辑全局完成。

元标记解决方案可能已被弃用,我建议您按照注册表步骤操作。

于 2013-07-07T21:54:31.067 回答