Com 如何将WebBrowser控件放入IE9标准中?

Com 如何将WebBrowser控件放入IE9标准中?,com,html,automation,standards,internet-explorer-9,Com,Html,Automation,Standards,Internet Explorer 9,我正在使用自动化(即COM自动化)在Internet Explorer中显示一些HTML(9): 出现Internet Explorer,显示我的html,其开头为: <!DOCTYPE html> <HTML> <HEAD> ... 编辑:一个更详细、不易理解或可读的代码示例,它无助于进一步解决以下问题: IWebBrowser2 ie; CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_I

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

出现Internet Explorer,显示我的html,其开头为:

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

编辑:一个更详细、不易理解或可读的代码示例,它无助于进一步解决以下问题:

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条目上问道:

当HTML内容在嵌入式webcontrol中时,我们可以得到如何确定文档模式的描述吗?似乎文档模式的选择有所不同-可能是出于兼容性原因

MarkSil[MSFT]回应说:

@托马斯:谢谢你提出这个问题。WebBrowser控件决定文档模式的方式与IE相同,因为它包含相同的web平台(例如,IE和WebBrowser控件主机之间有一个共享的mshtml.dll)。WebBrowser控件默认为兼容视图浏览器模式,这意味着默认文档模式为IE7。以下是一篇博客文章,详细介绍了以下内容:

托马斯对此作出回应:

@MarcSil(关于:网络浏览器控制)

使用注册表项为WebControl选择文档模式的问题在于,它应用于整个应用程序。我为GoogleSketchUp编写插件,其中有WebDialog窗口来创建UI——它只是窗口中的WebBrowser控件。但这会导致一些问题,因为我想强制我的WebBrowser控件实例使用文档模式,而不是SU的所有WebBrowser控件作为一个整体

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


您是否尝试过在html中设置

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


这意味着最新版本不适用于。自IE7以来,的文档未更新

由于功能设置在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl下,因此您可以通过注册表API挂钩覆盖进程中的值

WebBrowser控件的IE9“版本”与IE8版本一样,实际上是一个浏览器中的多个浏览器。与IE8版本不同,通过更改doctype,您可以对页面内部的呈现模式进行更多的控制。当然,要更改浏览器模式,您必须像前面的答案一样设置注册表。以下是功能\u浏览器\u仿真的位置:

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)-网页 以IE8标准模式显示, 不管结果如何!DOCTYPE指令
  • 8000(0x1F40)-包含 基于标准!DOCTYPE指令 在IE8模式下显示
  • 7000(0x1B58)-包含 基于标准!DOCTYPE指令 以IE7标准模式显示
完整文档:


不确定您是否检查了我的答案,因为它似乎与您在更新中发布的内容一致。不起作用,直接回复您的答案。返回,抱歉。我尝试添加
,但文档模式仍然是IE8:(这个答案确实有效,但有一点很重要:必须将
X-UA-Compatible
指令置于
头部
所有其他元素之前(除了
标题
或其他
)。因此,最简单的方法是先放置它。例如,如果它放置在
STYLE
之后,则它将被忽略。如果我的浏览器是IE8,edge会在IE8中渲染吗?@climboid,是
IE=edge
表示安装的IE浏览器支持的最新版本。如果你的浏览器是IE8,则它将在IE8中渲染。()这对WebBrowser控件不起作用。不确定这些家伙在吹嘘什么。以下是服务器在IE11浏览器上使用
请求在带有元数据的页面上看到的内容。浏览器
Type=InternetExplorer11 Name=InternetExplorer Version=11.0主版本=11次版本=0ebControl,在同一页,来自同一台机器:
Type=IE7 Name=IE Version=7.0主版本=7次版本=0
我还没有抽出时间来测试你的想法。但是我投了赞成票,因为我从来都不知道有这样一个功能,如
GetOverrideKeyPath
。这就是我所能做到的。但是问题出现了,如果我设置了t怎么办他的值为9999,但客户端是IE8(即XP上的ie max版本为8)?它是否强制IE8标准模式或根本不强制?
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_BROWSER_EMULATION
                                   contoso.exe = (DWORD) 000090000