首页 文章

WebBrowser控件设置文档模式

提问于
浏览
0

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

我在下面的案例中有很多具体的信息,但我认为/希望的一般问题应该有一个适用于很多人的简单答案: How do I get the WebBrowser control to render exactly like whatever version of IE the user has installed? 我认为这归结为控制"Document Mode"


我试图让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的唯一方法是设置文档模式为“IE5怪癖” . 在这种情况下,即使浏览器模式设置为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应用程序中重新创建 .


Added May 17th:

这是一个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

这是我的“test.exe”在任务管理器中的样子:

enter image description here

1 回答

  • 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 无关 .

相关问题