IE9 WebBrowser控件将支持IE9的所有功能,包括SVG吗?

85

我最近升级到了IE9-beta版。现在,在我的.Net(3.5)WinForm应用程序中,我想要使用WebBrowser控件。

所以我的问题是,WebBrowser控件是否会展示IE9的所有属性和功能?

我的担忧是,我想在其中渲染一些SVG图形。

12个回答

131

WebBrowser控件将使用您安装的IE版本,但出于兼容性考虑,它默认以IE7标准模式呈现页面。

如果您想利用新的IE9功能,应在HTML页面的<head>标签中添加元标记。

这个meta标记必须在任何链接到CSS、JavaScript文件等的<head>之前添加,才能正常工作(只有其他标记或标签可以在它之前)。</p> <p>另一种方法是添加一个注册表项到:</p> <blockquote> <p>HKLM > SOFTWARE > Microsoft > Internet Explorer > Main > FeatureControl > FEATURE_BROWSER_EMULATION</p> </blockquote> <p>然后在其中添加“myApplicationName.exe”和值“9000”,以强制WebBrowser控件以IE9模式显示页面。虽然还有其他<a href="http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation" rel="noreferrer">值也可以使用</a>,但请注意,这些文档并不完全准确,因为无论使用什么值,似乎都无法使页面以IE8模式呈现。</p> <p>将注册表键添加到HKCU中相同的路径也可以起作用-这很有用,因为写入HKLM需要管理员权限,而HKCU则不需要。</p>


2
content 部分的不同值可以在这里找到:http://msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx - K B
如果这个设置可以存储在一个CSS文件中,我会更开心。现在我必须浏览很多文档,或者在Visual Studio中是否有多行搜索和替换功能? - K B
2
我尝试了元标记,但它不起作用。我收到了一个错误消息,指出“HTML1115:X-UA-Compatible META标记('IE = 9')被忽略,因为文档模式已经最终确定。”这导致我访问了网页http://evolpin.wordpress.com/2011/02/25/ie9-compatibility-and-the-meta-tag/。解决方案是确保元标记是<head>块内的第一个元素。 - Steg
22
注意,如果您在64位Windows上运行调用32位MSIE的32位应用程序,则应将注册表项添加到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION中。请注意保持原文意思不变,并使译文更加通俗易懂。 - igordc
1
我通过xsl / xslt呈现html,但由于某种原因regedit无法正常工作... meta发挥了作用。谢谢! - MazarD

84

WebBrowser控件的IE9“版本”,就像IE8版本一样,实际上是几个浏览器的组合。与IE8版本不同的是,您可以通过更改文档类型来在页面内部有一些对渲染模式的控制。当然,要更改浏览器模式,您必须像早期答案中所述设置注册表。这是FEATURE_BROWSER_EMULATION的reg文件片段:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328

以下是完整的代码集合:

  • 9999 (0x270F) - Internet Explorer 9。 无论有没有!DOCTYPE指令,网页都将以IE9标准模式显示。
  • 9000 (0x2328) - Internet Explorer 9。 包含基于标准的!DOCTYPE指令的网页将以IE9模式显示。
  • 8888 (0x22B8) - 网页将以IE8标准模式显示,而与!DOCTYPE指令无关。
  • 8000 (0x1F40) - 包含基于标准的!DOCTYPE指令的网页将以IE8模式显示。
  • 7000 (0x1B58) - 包含基于标准的!DOCTYPE指令的网页将以IE7标准模式显示。

完整文档:

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


8
安装了IE 9后,似乎无法以IE 8模式呈现页面。将值设置为7000会以IE 7模式呈现,而将其设置为8000/8888/9000/9999会以IE 9模式呈现。不知道这是否是某种错误或者是否是有意为之。 - Michael Low
2
我必须在 current_user 和 local_machine 中都添加密钥,然后它才能为我开始工作。但是之后成功了。 - Sarah Bailey
1
这篇博客文章,https://weblog.west-wind.com/posts/2012/feb/15/make-your-chm-help-files-show-html5-and-css3-content 提到注册表条目将根据32位或64位Windows而有所不同。32位为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION,而64位为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION - Richard Chambers

26

谢天谢地我找到了这个。以下内容非常重要:

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

在没有这个设置的情况下,我生成的所有报告都无法在IE9上正常工作,尽管它们在IE8上表现良好。它们在Web浏览器控件中显示正确,但是当我调用.Print()时,会出现缺失字母、白色空间混乱等问题。它们只是基本的HTML,即使在Mosaic中也应该能够呈现。不确定为什么IE7兼容模式会出现问题。值得注意的是,您可以将同一页打印5次,并且每次都会缺少不同的字母。这甚至会影响PDF输出,因此肯定是浏览器的问题。


17

关于64位Windows的一些注意事项,这似乎会让一些人感到困惑。 如果您的应用程序在64位Windows下运行,则可能需要在[HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]下设置DWORD。


16

仅为完整起见...

对于32位操作系统,您必须向注册表中添加一个条目:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

对于64位操作系统,您需要向注册表添加一个条目:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

此条目必须是一个DWORD,名称为您的可执行文件名,托管Webbrowser控件;

例如:

myappname.exe(不要使用MSDN网页中的“Contoso.exe”作为占位符名称)

然后,根据表格在以下网址上给它一个DWORD值:

http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

我更改了为11001十进制或0x2AF9十六进制--- (IE 11 EMULATION),因为这不是默认值(如果您已安装IE 11或其他版本)。

该MSDN文章包含有关影响Internet Explorer Web浏览器行为的其他几个注册表更改的注意事项。


1
DWORD部分非常重要。QWORD不起作用,人们很容易犯这个错误。 - pvieira
我想补充一点,在使用VS进行调试时,您应该为myappname.vshost.exe添加一个条目。另一方面,我怀疑仅仅在调试器中启动应用程序,然后再次在调试器中启动也可以解决问题。我记得这对我起过作用,但我不确定百分之百。 - Papa Smurf
1
由于我的IE11配置,我需要打开IE11并将目标URL添加到我的受信任站点中。如果没有这样做,即使我的注册表已正确配置,页面脚本也无法运行。 - Tony

15

我知道这个帖子很古老,已经有全面的答案了。

以防你不知道:

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

你不必硬编码IE版本号,如下所示:

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


这与问题无关 - WebBrowser控件只在IE7模式下加载,除非针对您特定的程序使用注册表设置进行覆盖。 - Christian
4
@Christian 你确定吗?据我所知,如果网页头部包含<meta http-equiv="X-UA-Compatible" content="IE=edge">,则webBrowser将以最新的IE模式加载。为什么Mikel的答案获得了90多个赞?因为他的解决方案有效。如果您可以更改网页,则无需更改注册表。 - Tyler Liu
我非常确定,但我认为它也取决于网站的位置。我一直在加载本地内容,唯一改变版本的方法是通过注册表。相信我,如果有其他方法可行,我会放弃注册表解决方案,但似乎没有其他方法可行。 - Christian
ie=edge 对我来说起作用了,而且我没有动过注册表。谢谢! - Yisroel M. Olewski
@Christian 这确实与问题有关 - 解决方案很好。 - MarzSocks
谢谢,这帮助我编写了一个可在每台Windows 7和Windows 10 PC上运行的SVG-able CHM帮助文件,而不受IE设置的影响。 - Paul

6
我完全赞同所提供的解决方案,但我认为有必要进行一些澄清。对于每个进程(也可以称为vshost.exe、yourWinformApplication.exe.svchost或应用程序名称.exe),都需要添加一个DWORD值,例如在我的情况下,在应用程序名称中设置9000(十进制),然后运行脚本就会顺利且无误。最常见的错误是认为需要按原样添加"contoso.exe",然后认为所有工作都完成了!

3

是的,WebBrowser控件使用你所安装的IE版本。这意味着,如果你在安装了IE 8的计算机上运行应用程序,那么你所依赖的IE 9功能将不可用。


2
请再次仔细阅读我的回答。无需点踩。我说的是如果他尝试使用IE9功能然后部署到没有IE9的机器上,那些功能将无法工作。您的向后兼容性注册表设置也无法改变这个事实。 - Josh
16
你的第一句话显然是错误的。至少可以说,你的第二句话显而易见且懒惰。顺便说一句,感谢你的报复性投票。非常成熟。 - whitehawk
3
WebBrowser控件会使用安装的IE版本,但检测脚本可能无法识别。请尝试访问此网站(http://www.whatismybrowser.com/)。我知道其他网站给出的信息是错误的,但这个网站可以正确地识别出浏览器所使用的IE版本。 - cjbarth

3

我曾尝试过这个解决方案,但它对我无效!因为我使用的是64位系统,所以我需要替换注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

与众所周知的不同,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

1
我遇到了同样的问题,这里的注册表答案没有起作用。
我的程序中有一个浏览器控件,旧版本在XP和Windows 7上都能正常工作,在新版本的Windows 7(64位)中失败了。浏览器中显示的网页使用了一些奇怪的插件来显示旧的SVG地图(我认为它是一个Java小程序)。
结果发现问题与Windows 7中的DEP保护有关。旧版的dotnet 2未在exe文件中设置所需的DEP标志,但从dotnet 2 SP1开始则有(是的,根据编译机器不同,编译行为及运行时行为也会有所改变…)。 MSDN博客NXCOMPAT和C#编译器中有相关记录。引文如下:「这无疑会让一些开发者感到惊讶……下载一个框架服务包,重新编译,运行你的应用程序,你现在得到的是IP_ON_HEAP异常。」
在Visual Studio中添加以下内容到后期构建过程中,即关闭了exe的DEP,一切都按预期工作:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接