我正在使用自动化(即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标准模式选择加入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 sites with Browser Mode vs. Doc Mode上询问:
我们是否可以获得HTML内容在嵌入式web控件中时如何确定文档模式的说明?似乎是文档模式选择不同 - 可能出于兼容性原因?
MarkSil [MSFT]回复:
@Thomas:谢谢你提出这个问题。 WebBrowser控件以与IE相同的方式确定文档模式,因为它包含相同的Web平台(例如,IE和WebBrowser控制主机之间存在一个共享的mshtml.dll)。 WebBrowser Control默认为兼容性视图浏览器模式,这意味着默认的doc模式是IE7。这是一篇博文,其中详细介绍了这一点:blogs.msdn.com/.../more-ie8-extensibility-improvements.aspx。
托马斯回应:
@MarcSil(re:WebBrowser Control)
使用注册表项为WebControl选择文档模式的问题在于它作为一个整体应用于应用程序。我为Google SketchUp编写了插件,你可以在其中使用WebDialog窗口来创建UI - 它只是一个窗口中的WebBrowser控件。但是这会导致问题,因为我想强制我的WebBrowser控件实例的文档模式,而不是整个SU的所有WebBrowser控件。
所以,我的问题是:如何控制WebBrowser控件的每个实例的文档模式?
答案 0 :(得分:28)
您是否尝试过在html中设置
<meta http-equiv="X-UA-Compatible" content="IE=9" />
或
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
表示最新版本
答案 1 :(得分:13)
WebBrowser控件的IE9“版本”,就像IE8版本一样,实际上是几个浏览器中的一个。与IE8版本不同,您可以通过更改doctype来更好地控制页面内的呈现模式。当然,要更改浏览器模式,您必须像早期的答案一样设置注册表。这是FEATURE_BROWSER_EMULATION的位置:
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 000090000
以下是完整的代码集:
完整的文档:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
答案 2 :(得分:2)
FEATURE_BROWSER_EMULATION不适用于CoInternetSetFeatureEnabled。自IE7以来,INTERNETFEATURELIST的文档未更新。
由于功能设置位于HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl下,因此可能能够通过注册表API挂钩覆盖进程中的值。