【问题标题】:WebBrowser control set Document ModeWebBrowser 控件设置文档模式
【发布时间】:2014-05-15 22:57:20
【问题描述】:

所以我知道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) 和使用 WbeBrowser 控件的简单 WinForms 应用程序中的上述 HTML:

WinForms 应用程序在不需要时有一个滚动条,而且边框与背景颜色大小不匹配。使用 IE 开发人员工具,我可以尝试浏览器模式(IE7 到 IE10)的每种组合和文档模式(标准、怪癖、IE7 - IE9 标准)的每种组合,我可以让 IE 像 WebBrowser 控件一样呈现的唯一方法是设置文档模式为“IE5 quirks”。在这种情况下,即使浏览器模式设置为 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

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

【问题讨论】:

  • p.s.-对不起,这个问题很长,但我已经花了几天时间来解决这个问题,不知道还能去哪里寻求帮助或如何让问题更短/更好。
  • 有趣的是,如果我将我的 EXE 重命名为 iexplore.exe,它会像 IE 一样呈现。不过不要认为这对我来说是一个解决方案,如果我要这样重命名我的 EXE,那将非常像病毒,并且对我们的技术支持部门来说是一个痛苦。
  • 那么,实际的IE版本是多少,是v11吗?如果是这样,您也可以尝试使用 User Agent 字符串:stackoverflow.com/a/19601064/1768303
  • IE10,我只想让 WebBrowser 控件做我认为它会做的事情,以他们安装的任何版本的 IE 的方式呈现。这就是为什么我在大约 10 年前开始使用该控件的原因,它曾经像 IE5 一样呈现,但现在他们添加了所有兼容性/遗留内容,我只想将其全部关闭。
  • @eselk 显然,0x27100x2711 的值不相同。

标签: webbrowser-control mshtml twebbrowser


【解决方案1】:

根据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 是注册表的有效条目。

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

【讨论】:

  • 好吧,无论如何,这给了我希望。我在问题的底部添加了一个 reg 导出和一个任务管理器屏幕截图。你看有什么不对吗?看起来你在Win7上,我想知道这是否不再适用于Win8。
  • @eselk 我在 Windows 8 上试过。如果在测试文档的开头添加&lt;!doctype html&gt;,MSIE 和我的应用程序都可以很好地呈现。否则,两个浏览器都会意外呈现。
  • 这可能很愚蠢,因为它对你有用(我假设其他人,因为没有其他答案/cmets),我现在假设这是答案。我很确定我为我的 EXE 尝试了 10001 和 10000,并且在我将 iexplore.exe 添加到注册表之前也看到了同样的事情。可悲的是,我在接下来的几周里被安排在另一个项目上,但希望我能回来更新这个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2014-09-02
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2013-10-31
相关资源
最近更新 更多