如何把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钩子覆盖您的进程中的值。