有人可以提供关于HTML / CSS标准的TWebBrowser组件的一些背景知识吗?令我感到困惑的是,尽管我使用的是安装了IE 8的Windows 7,但是当我在IE8中显示HTML文件与在TWebBrowser中显示相同HTML文件时看到的结果相比,我获得了不同的渲染结果。例如,当在TWebBrowser(Delphi 7)中查看HTML文件时,在CSS文件中完全忽略伪元素p:before
和p:first-letter
,但是当在IE8中查看相同的HTML文件时,它们很荣幸。
SHDOCVW.DLL可能已经老了以至于我正在影响IE3渲染吗?我试图解决为什么IE8经常呈现HTML与使用TWebBrowser时获得的HTML有很大不同。
答案 0 :(得分:4)
IE8默认情况下在IE7标准模式下呈现在WebBrowser控件实例内运行的页面。你看到的差异是基于IE8和IE的差异。 IE7标准。
当可执行文件加载WebBrowser控件的实例时,它会扫描注册表以检查可执行文件是否需要IE7 Standards或IE8 Standards模式。
WebBrowser Control Rendering Modes in IE8(deprecated)
WebBrowser Control Rendering Modes in IE8(Updated)
要在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兼容元标记来指定渲染模式来覆盖渲染设置。
例如,强制IE8 TWebBrowser控件在IE8标准使用中呈现网站:
<META http-equiv="X-UA-Compatible" content="IE=8">
这可以通过主机标头或每个文档编辑全局完成。
Meta标签解决方案可能已被弃用,我建议您按照注册表步骤进行操作。