WebBrowser控件设置文档模式

时间:2014-05-15 22:57:20

标签: webbrowser-control mshtml twebbrowser

所以我知道FEATURE_BROWSER_EMULATION,但要么它不适合我,要么它只控制浏览器模式而不是文档模式。

我在下面的案例中有很多具体的信息,但我认为/希望的一般问题应该有一个适用于很多人的简单答案:如何让WebBrowser控件准确呈现喜欢用户安装的IE的哪个版本?我认为这归结为控制"文档模式"


我试图让WebBrowser控件以与IE10相同的方式呈现HTML,而无需修改HTML(因为它不健全)。我的应用程序是一个显示HTML电子邮件的电子邮件客户端,以下是GMail的典型电子邮件:

<div dir="ltr"><div id="" team-id="21062" dir="ltr"><div id="email-body-container" style="width:96%; padding:0; margin:2%; border:solid 1px #E7E7E7;">
  <div id="email-body-header" style="width:94%; padding:3% 3% 2% 3%; background-color:#f5f5f5; border-bottom:solid 1px #eaeaea;">
    <img src="http://www.google.com/adwords/htp/static/legacy/adwords_logo_grey_166x28.png" alt="Google AdWords" width="166" height="28" style="outline:none; text-decoration:none; -ms-interpolation-mode: bicubic; display:block;">
  </div>
</div></div>

我在一个名为c:\ test.htm的文件中有确切的HTML,我在IE中加载它,在地址栏中输入它,然后我使用Navigate("c:\\test.htm")将其加载到webbrowser控件中,并且他们不会渲染相同的东西。

我知道它不是有效的HTML,因为它甚至不包含html标签,正文标签等,但这就是GMail做事的方式而我无法控制(或其他奇怪的东西)电子邮件客户端)。我唯一知道的是Internet Explorer似乎总是很好地显示它们(可能大多数人用IE测试,这就是为什么)。但是,它们不能很好地显示在WebBrowser控件中。以下是IE10(Win8)中的上述HTML以及使用WbeBrowser控件的简单WinForms应用程序:

enter image description here

当不需要时,WinForms应用程序有一个滚动条,并且边框与背景颜色大小不匹配。使用IE开发人员工具我可以尝试浏览器模式(IE7到IE10)和文档模式的每个组合(标准,怪癖,IE7 - IE9标准)的每种组合,并且我可以像WebBrowser控件那样使IE呈现的唯一方法是设置文档模式为&#34; IE5怪癖&#34;。在这种情况下,即使浏览器模式设置为IE10,它也会呈现与WebBrowser控件相同的颜色。

我已设置此注册表值: HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION \ WindowsFormsApplication2.exe

我已尝试将其设置为10000,10001,9999,8888,9000和其他一些值(十进制,而不是十六进制),但它们对此问题没有影响。我的EXE名称是WindowsFormsApplication2.exe,我已将我的构建设置为x64,并确认它是作为64位进程运行的,因此我不必担心设置Wow6432Node(但我甚至尝试设置也。)

所以我认为只控制浏览器模式,而不是文档模式?我也尝试了过时的FEATURE_NATIVE_DOCUMENT_MODE设置,没有变化。

注意,我将此标记为TWebBrowser,因为我最初使用它来发现此问题,但由于几乎没有人使用它,我确保我可以在一个真正简单的.NET C#WinForms应用程序中重新创建。


5月17日添加:

这是一个reg导出(我删除了HKCU下的所有内容,只是为了确保它不会覆盖HKLM中的任何内容):

Windows注册表编辑器版本5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"prevhost.exe"=dword:00001f40
"HelpPane.exe"=dword:00002710
"sllauncher.exe"=dword:00001f40
"test.exe"=dword:00002710
"iexplore.exe"=dword:00002711
"windowsformsapplication2"=dword:00002710
"windowsformsapplication2.exe"=dword:00002710
"test"=dword:00002710

这是我的&#34; test.exe&#34;看起来像在任务管理器中:

enter image description here

1 个答案:

答案 0 :(得分:3)

根据MSDN

10001 (0x2711)  Internet Explorer 10. Webpages are displayed in IE10 Standards 
                mode, regardless of the !DOCTYPE directive.

10000 (0x2710)  Internet Explorer 10. Webpages containing standards-based 
                !DOCTYPE directives are displayed in IE10 Standards mode. 
                Default value for Internet Explorer 10.

您计算机上的MSIE使用0x2711,这意味着它将始终以标准模式呈现文档。您的应用使用0x2710。由于您的测试文档没有!doctype,因此它将以Quirks模式呈现。这是网页外观不同的根本原因。

请注意,windowsformsapplication2.exe是Registry的有效条目。

On Windows 7

MSIE和我的应用都有一个滚动条。抱歉,我不知道如何使滚动条看起来与MSIE完全一致。但我确定滚动条的外观与FEATURE_BROWSER_EMULATION

无关