如何把WebBrowser控件到IE9标准?

我正在使用自动化(即COM自动化)在Internet Explorer(9)中显示一些HTML:

ie = CoInternetExplorer.Create; ie.Navigate2("about:blank"); webDocument = ie.Document; webDocument.Write(szSourceHTML); webDocument.Close(); ie.Visible = True; 

出现Internet Explorer,显示我的HTML,它的起点为:

 <!DOCTYPE html> <HTML> <HEAD> ... 

注意: html5标准模式select的doctype html

除非文件不在ie9标准模式下; 它在ie8标准模式下: 替代文字


如果我把html保存到我的电脑里:

替代文字

然后查看那个 html文件,IE是进入标准模式:

替代文字

我的问题是如何更新我的SpawnIEWithSource(String html)函数将浏览器转换为标准模式?

 void SpawnIEWithSource(String html) { Variant ie = CoInternetExplorer.Create(); ie.Navigate2("about:blank"); webDocument = ie.Document; webDocument.Write(html); webDocument.Close(); ie.Visible = true; } 

编辑:一个更详细,不易理解或可读的代码示例,这不能帮助进一步的问题可能是:

 IWebBrowser2 ie; CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_WebBrowser2, ie); ie.AddRef(); ie.Navigate2("about:blank"); IHtmlDocument doc; dispDoc = ie.Document; dispDoc.AddRef(); dispDoc.QueryInterface(IHTMLDocument2, doc); dispDoc.Release() doc.Write(html); doc.Close(); doc.Release(); ie.Visible = true; ie.Release(); 

更新

评论者在ieblog条目上询问了浏览器模式与文档模式的testing网站 :

当HTML内容位于embedded式Web控件中时,我们是否可以描述如何确定文档模式? 似乎是文档模式select不同 – 也许出于兼容性的原因?

MarkSil [MSFT]回应:

@托马斯:谢谢你提出这个问题。 WebBrowser控件确定文档模式的方式与IE相同,因为它包含相同的Web平台(例如,在IE和WebBrowser控制主机上有一个共享的mshtml.dll)。 WebBrowser控件默认为兼容性视图浏览器模式,这意味着默认的文档模式是IE7。 这里有一篇关于这个更详细的博客文章: blogs.msdn.com/…/ more- ie8-extensibility-improvements.aspx 。

Thomas回答说:

@MarcSil(re:WebBrowser控件)

使用registry项为WebControlselect文档模式的问题是,它适用于整个应用程序。 我为Google SketchUp编写了插件,在这些插件中您可以使用WebDialog窗口来创build用户界面 – 这只是窗口中的WebBrowser控件。 但是这样做会导致问题,因为我想为WebBrowser控件的实例强制一个文档模式,而不是整个SU的WebBrowser控件。

所以,我的问题是:如何控制WebBrowser控件的每个实例的文档模式?

你有没有尝试在你的HTML设置

 <meta http-equiv="X-UA-Compatible" content="IE=9" /> 

要么

 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

这意味着最新版本

WebBrowser控件的IE9“版本”,比如IE8版本,其实就是一个浏览器。 与IE8版本不同的是,通过更改文档types,您可以更好地控制页面内的呈现模式。 当然,要改变浏览器模式,你必须像早先的答案一样设置你的registry。 这是FEATURE_BROWSER_EMULATION的位置:

 HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION contoso.exe = (DWORD) 000090000 

这是完整的代码集合:

  • 9999(0x270F) – Internet Explorer 9.网页以IE9标准模式显示,无论!DOCTYPE指令如何。
  • 9000(0x2328) – Internet Explorer 9.包含基于标准!​​DOCTYPE指令的网页以IE9模式显示。
  • 8888(0x22B8) –不pipe!DOCTYPE指令如何,都以IE8标准模式显示网页。
  • 8000(0x1F40) – 包含基于标准的!DOCTYPE指令的网页以IE8模式显示。
  • 7000(0x1B58) – 包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。

完整的文档:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

FEATURE_BROWSER_EMULATION不适用于CoInternetSetFeatureEnabled 。 自IE7以来, INTERNETFEATURELIST的文档不会更新。

由于该function设置位于HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl下,您可能可以通过registryAPI钩子覆盖您的进程中的值。