Delphi使用Microsoft的Shell Doc对象和控件库(SHDOCVW.DLL)

时间:2013-07-07 21:27:01

标签: delphi delphi-xe2 delphi-7 delphi-2010 delphi-2009

有人可以提供关于HTML / CSS标准的TWebBrowser组件的一些背景知识吗?令我感到困惑的是,尽管我使用的是安装了IE 8的Windows 7,但是当我在IE8中显示HTML文件与在TWebBrowser中显示相同HTML文件时看到的结果相比,我获得了不同的渲染结果。例如,当在TWebBrowser(Delphi 7)中查看HTML文件时,在CSS文件中完全忽略伪元素p:beforep:first-letter,但是当在IE8中查看相同的HTML文件时,它们很荣幸。

SHDOCVW.DLL可能已经老了以至于我正在影响IE3渲染吗?我试图解决为什么IE8经常呈现HTML与使用TWebBrowser时获得的HTML有很大不同。

1 个答案:

答案 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标签解决方案可能已被弃用,我建议您按照注册表步骤进行操作。