winforms应用程序中承载的MSIEs WebBrowser控件以兼容模式运行

winforms应用程序中承载的MSIEs WebBrowser控件以兼容模式运行,winforms,internet-explorer,internet-explorer-8,webbrowser-control,ie8-compatibility-mode,Winforms,Internet Explorer,Internet Explorer 8,Webbrowser Control,Ie8 Compatibility Mode,我以winforms的形式托管MSIE。不幸的是,它坚持在兼容模式下运行,不管我是否给它一个在独立IE中以IE8模式运行的页面。其结果是,在独立MSIE中正确呈现的某些内容在托管控件中完全不对齐和混乱 除了文档类型等,是否有一些神奇的方法告诉webbrowser我希望它以与我在独立MSIE中加载页面相同的方式呈现页面 我不想使用注册表项覆盖(),因为我的表单是另一个应用程序加载项的一部分。我不想更改主应用程序的IE行为,也不想更改在该应用程序下运行的其他加载项的IE行为。我只想让它在我表单中托管

我以winforms的形式托管MSIE。不幸的是,它坚持在兼容模式下运行,不管我是否给它一个在独立IE中以IE8模式运行的页面。其结果是,在独立MSIE中正确呈现的某些内容在托管控件中完全不对齐和混乱

除了文档类型等,是否有一些神奇的方法告诉webbrowser我希望它以与我在独立MSIE中加载页面相同的方式呈现页面


我不想使用注册表项覆盖(),因为我的表单是另一个应用程序加载项的一部分。我不想更改主应用程序的IE行为,也不想更改在该应用程序下运行的其他加载项的IE行为。我只想让它在我表单中托管的浏览器中工作,而不是在应用程序范围内,也不是在进程范围内。

我没有测试过这一点,但是如何使用标记和属性,将
X-UA-COMPATIBLE
值设置为
IE=8
,这将指示web浏览器以IE 8标准模式显示页面。例如:

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

从下面的这一行看来,这应该是可行的

默认情况下,托管 网络浏览器控制打开 IE7模式下基于标准的页面 除非页面包含 适当的X-UA兼容头。 您可以通过添加名称来更改此设置 将应用程序可执行文件的 功能\u浏览器\u仿真功能 控制键并设置值 因此


要更改应用程序中运行的Web浏览器控件的默认行为以匹配IE本身的功能,您必须设置功能\u浏览器\u仿真功能控件键

例如,您可以模仿IE8的行为(允许站点以IE8标准模式渲染),如下所示

内部HKEY\U LOCAL\U MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl

创建名为功能\u浏览器\u仿真的新密钥

在该键内,添加一个新的注册表项,其值为8000,并带有应用程序可执行文件的名称。例如:

"YourApp.exe" = dword 8000 (Hex: 0x1F40)
详情载于:

谢谢。我已经添加了与X-UA兼容的元标记。仍在尝试确认它是否真的起作用了…使用meta标记的结果是什么?我能够测试它,它工作了。到目前为止,我对meta标签有一个不确定的测试结果。不确定,因为在应用标记后,它被正确渲染,但在将meta标记更改为IE7后,它仍然正确渲染,再次移除后,它仍然正确渲染。换句话说,在第一轮测试之后,我无法重现在使用meta标记之前看到的渲染错误。我需要做更多的测试,但还没有时间这么做……我也尝试过使用
X-UA-Compatible
)。它对我也不起作用。@Ian Boyd-确保X-UA兼容的东西是标签中的第一个标签。。。如果不是,IE会忽略它。问题是我的应用程序实际上是一个在另一个应用程序中运行的加载项。主应用程序也承载MSIE,它的其他外接程序也是如此。通过添加功能控制注册表项,我将改变应用程序范围内的行为,并引入不需要的行为/渲染。我只想将其更改为承载MSIE的一个表单,同时保留在同一主可执行文件下运行的所有其他浏览器。不幸的是,这不是一个受支持的方案。好的,谢谢。IE的未来版本如何,当它们在另一个进程中托管时,它们是否也会像以前的版本一样工作?我必须说,我觉得很奇怪,IE8在默认情况下的行为与IE8不一样,然后,对于那些希望它的行为与IE7/6/5/etcIE9的行为相同并且需要选择加入的人,可以使用注册表。这里的要点是,在托管时模拟旧版本是,它允许用户无所畏惧地安装IE的新版本,而不会破坏其他应用程序。如果他们更新
CoInternetSetFeatureEnabled
API以添加此功能,这将允许我们完全避免注册,但是我注意到
urlmon.h
没有包含这个枚举。我想是一厢情愿吧。