对于 IE10,为啥 WebBrowser 控件的默认 quirks 模式是“Internet Explorer 5 quirks”?

Posted

技术标签:

【中文标题】对于 IE10,为啥 WebBrowser 控件的默认 quirks 模式是“Internet Explorer 5 quirks”?【英文标题】:For IE10, why the WebBrowser control's default quirks mode is "Internet Explorer 5 quirks"?对于 IE10,为什么 WebBrowser 控件的默认 quirks 模式是“Internet Explorer 5 quirks”? 【发布时间】:2014-02-03 18:44:16 【问题描述】:

根据这篇文章Interoperable html5 Quirks Mode in IE10,基于 HTML5 的 quirks 模式是 IE10 中没有 DOCTYPE 或 X-UA-Compatible 标记的页面的默认 quirks 模式。 IE 的旧 quirks 模式现在称为 Internet Explorer 5 quirks

在官方 IE10 中是这样的。但不在 WebBrowser 控件中。默认的 quirks 模式是 WebBrowser 控件应用程序中的 IE5 quirks。

例如:对于一个没有 DOCTYPE 或 X-UA-Compatible 标签的最简单的 html 页面:

<html>
<head>
<meta charset="UTF-8" />
<title>Get documentMode!</title>
</head>
<body>
<h2>document.documentMode</h2>
<p>
<script>
document.write(document.documentMode);
</script>
<p>
</body>
</html>

官方IE10中documentMode = 10,但是WebBrowser控件应用中documentMode = 5(测试前我添加了注册表项值:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyApp.exe到 10000,或十进制的 10001)。

为什么行为不同?

如何将 WebBrowser 控件应用程序的默认 quirks 模式配置为“基于 HTML5 的 quirks 模式”?

感谢您提前回复。

【问题讨论】:

你为什么不声明一个Doctype? 我无法修改网站页面。 来自 IE10 中的 Interoperable HTML5 Quirks Mode 一文,IE5 quirks 模式仅用于那些没有 DOCTYPE 并通过 X-UA-Compatible 选择加入的页面。 我认为我在 WBC 应用程序中最简单的 html 页面的文档模式应该是基于 HTML5 的怪癖,因为它没有 DOCTYPE,并且没有X-UA 兼容标签 (IE=5) 也是。但它的价值是IE5的怪癖。我可以有一些方法让我的 WebBBrowser Control 应用程序在不修改网页的情况下具有相同的怪癖模式吗? 可能重复:***.com/q/646742/50447 嗨,罗兰。我认为这不是一个重复的问题。我已将我的应用程序注册表项添加到“FEATURE_BROWSER_EMULATION”中。我的问题是关于“为什么官方 IE10 默认是 HTML5 Quirks Mode,但我的应用程序默认是 IE5 Quirks Mode”。我无权修改网页(添加 DOCTYPE 或 X-UA-Compatible 元标记等)。 【参考方案1】:

如果你想让 IE10 网页浏览器控件显示没有 doctype 的页面,你需要设置以下两个注册表项才能使其工作。

:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION:yourappname.exe类型:(DWORD_32Bit 值)数据:0x2711

:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_USE_QME_FOR_TOPLEVEL_DOCS:yourappname.exe类型:REG_DWORD(DWORD_32Bit 值)数据:1

【讨论】:

是的,添加隐藏的注册表项“FEATURE_USE_QME_FOR_TOPLEVEL_DOCS”有效。感谢你的回复。但是有副作用。添加此密钥后,应用程序经常崩溃。有什么建议吗? @aaron - 你是从哪里了解到 FEATURE_USE_QME_FOR_TOPLEVEL_DOCS 的?我在网上看到的唯一参考来自您的帖子。您是否提出了支持问题?【参考方案2】:

要强制文档在 Web 浏览器控件中以 IE10 标准模式显示(与 DOCTYPE 无关),注册表项 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyApp.exe 的 DWORD 值(其中 MyApp.exe 是应用程序的 exe 文件的名称)should be 0x2711

如果这对您不起作用,我建议使用像 regmon 这样的工具来确认它正在读取您的应用程序的注册表项。

【讨论】:

我已经测试了值为 0x2711 的应用程序。它不起作用。根据您的建议,我通过工具Procmon确认已读取注册表值。 是的,已读取注册表项。是否有其他设置可以控制该行为?

以上是关于对于 IE10,为啥 WebBrowser 控件的默认 quirks 模式是“Internet Explorer 5 quirks”?的主要内容,如果未能解决你的问题,请参考以下文章

vb 的webBrowser控件为啥有时候打开网页速度奇慢?用IE却正常.

非 IE WebBrowser ActiveX 控件

无法使用 WebBrowser 控件登录

WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法

VisualStudio版本更新了这么多,为啥不把附带的webbrowser控件升级下,搞个支持chrome内核的?

使用 IE9 的 WebBrowser 控件