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


84

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

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

我担心的是,我想在上面渲染一些SVG图形。

Answers:


82

与IE8版本一样,WebBrowser控件的IE9“版本”实际上是多个浏览器合而为一的。与IE8版本不同,您可以通过更改doctype来更好地控制页面内的呈现模式。当然,要更改浏览器模式,您必须像先前的答案一样设置注册表。这是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 Explorer9。无论!DOCTYPE指令如何,网页均以IE9标准模式显示。
  • 9000(0x2328) -Internet Explorer9。包含基于标准的!DOCTYPE指令的网页以IE9模式显示。
  • 8888(0x22B8)-无论DOCTYPE指令如何,网页均以IE8标准模式显示。
  • 8000(0x1F40) -包含基于标准的!DOCTYPE指令的网页以IE8模式显示。
  • 7000(0x1B58) -包含基于标准的!DOCTYPE指令的网页以IE7标准模式显示。

完整的文档:

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


8
安装IE 9后,似乎无法在IE 8模式下呈现页面。将值设置为7000将进入IE 7模式,而将8000/8888/9000/9999设置为IE 9模式。我是不知道这是某种错误还是故意的。
mikel,

2
我必须先将密钥添加到current_user和local_machine,然后才能对我起作用。但是之后成功了。
莎拉·贝利

这篇博客文章weblog.west-wind.com/posts/2012/feb/15/…提到注册表项会因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
理查德·钱伯斯

129

WebBrowser控件将使用您安装的任何版本的IE,但出于兼容性原因,默认情况下它将以IE7标准模式呈现页面。

如果要利用IE9的新功能,则应将meta标签添加到HTML页面的标签<meta http-equiv="X-UA-Compatible" content="IE=9" ><head>

您必须在添加到您还<head>可以正常使用的CSS,JavaScript文件等任何链接之前添加此元标记(只有其他<meta>标记或<title>标记可以位于其之前)。

一种替代方法是将注册表项添加到:

HKLM>软件> Microsoft> Internet Explorer>主页> FeatureControl> FEATURE_BROWSER_EMULATION

然后在其中添加值为“ 9000”的“ myApplicationName.exe”,以强制WebBrowser控件以IE9模式显示页面。尽管您也可以使用其他值,但请注意,这些文档并不完全准确,因为无论您使用什么值,都无法以IE 8模式呈现页面。

将注册表项添加到HKCU中的相同路径而不是HKLM中也可以使用-这很有用,因为写入HKLM需要管理员权限,而HKCU则不需要。


2
可以在这里找到内容部分的不同值:msdn.microsoft.com/zh-cn/library/ie/ms533876(v=vs.85).aspx
KB

如果此设置可以存储在CSS文件中,我会更高兴。现在,我必须浏览许多文档,或者Visual Studio中是否有多行搜索和替换功能?
KB

2
我尝试了meta标记,但是它不起作用。我收到一条错误消息,指出“ HTML1115:兼容X-UA的META标记('IE = 9'),因为文档模式已完成。”,这使我进入了网页evolpin.wordpress.com/2011/02/ 25 /…。然后的解决方案是确保meta标签是<head>块内的第一个元素。
Steg 2012年

21
请注意,如果您在64位Windows上运行32位应用程序(称为32位MSIE),则应将注册表项添加到HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION代替。
igordc 2012年

1
我正在通过xsl / xslt渲染html,而regedit出于某些原因而无法正常工作……meta发挥了作用。谢谢!
MazarD 2014年

25

谢天谢地,我发现了这一点。以下内容非常重要:

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

没有这个,尽管在IE8中表现出色,但我生成的报告都无法在IE9安装后正常工作。它们将正确显示在Web浏览器控件中,但是当我调用.Print()时,会出现字母丢失,空白现象等现象。它们只是基本的HTML,即使在Mosaic中也应能够呈现。heh不知道为什么IE7兼容模式会变成麻烦。值得注意的是,您可以在同一页面上进行.Print()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/zh-CN/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添加一个条目。另一方面,我怀疑只是从调试器中启动应用程序,然后在调试器中启动应用程序也可以解决问题。我认为它一次对我有用;但我不确定100%。
蓝精灵爸爸(Papa Smurf)

1
由于我的IE11配置,我需要打开IE11并将目标URL添加到我的受信任站点。没有这个,即使我的注册表被正确配置,页面脚本也不会运行。
托尼

15

我知道这个主题很旧,已经有了全面的答案。

以防万一您不知道这一点:

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

您不必将IE版本号硬编码为

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


这与问题无关-WebBrowser控件仅在IE7模式下加载,除非用特定程序的注册表设置覆盖。
基督教徒

4
@克里斯蒂安你确定吗?据我所知,如果网页包含<meta http-equiv="X-UA-Compatible" content="IE=edge" >在标题中,则webBrowser将以最新的IE模式加载。为什么有90多个支持mikel的答案?因为他的解决方案有效。如果可以更改网页,则无需更改注册表。
泰勒·朗

我100%积极,但是我认为这也取决于网站的位置。我一直在加载本地内容,该版本发布的唯一方法是通过注册表。相信我,我会将注册表解决方案丢给其他任何可行的方法,但似乎没有其他可行的方法。
基督教徒

ie = edge为我工作,而无需我触摸注册表。谢谢!
伊斯洛尔·M·奥列斯基

@Christian这确实与问题有关-解决方案效果很好。
MarzSocks

6

我完全同意所提供的解决方案,但是我认为有必要作一些澄清,这一点很重要。

对于需要添加带有提供的值的DWORD的每个进程(也请阅读:vshost.exe,yourWinformApplication.exe.svchost或您的application.exe的名称),在我的情况下,我将9000(十进制)保留在应用程序中命名并顺利运行且无错误的脚本。

最常见的错误是认为有必要按原样添加“ contoso.exe”并认为一切正常!


3

是的,WebBrowser控件使用您安装的任何版本的IE。这当然意味着,如果您在具有IE 8的计算机上运行应用程序,则您依赖的IE 9功能将不可用。


2
重新阅读我的答案。不需要投票。我说过,如果他尝试使用IE9功能,然后部署到没有IE9的计算机上,则这些功能将不起作用。您的向后兼容性注册表设置不会更改该事实。
乔什(Josh)

16
您的第一句话显然是错误的。您的第二句话至少是显而易见的和懒惰的。顺便说一句,谢谢你的惩罚性投票。很成熟
whitehawk

3
WebBrowser控件确实使用已安装的IE版本。但是检测脚本可能没有意识到这一点。试试这个[site(whatismybrowser.com/)] [1 ]。我知道其他站点给了我错误的信息,但是该站点正确地将浏览器标识为计算机上安装的IE版本。[1]:whatismybrowser.com
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

我喜欢下面的(C#)代码,它为您的应用设置了注册表设置。尽管需要权限,但不确定是否会在安装后将其剪切。对我来说,它解决了WebSocket在WPF中的WebBrowser控件中不可用的问题。

C#Webbrowser Ajax调用


1

我遇到了同样的问题,这里的注册表答案不起作用。

我的程序的新版本中有一个浏览器控件,该控件在XP上可以正常运行,但在Windows 7(64位)中却失败。旧版本可在XP和Windows 7上使用。

浏览器中显示的网页使用了一些奇怪的插件来显示旧的SVG地图(我认为它是Java小程序)。

事实证明,该问题与Windows 7中的DEP保护有关。

dotnet 2的旧版本没有在exe中设置DEP required标志,但是从dotnet 2 SP 1开始,它确实设置了(是的,exe的编译行为和运行时行为会根据您在哪台计算机上进行更改而变化,nice。 ..)。

它记录在MSDN博客NXCOMPAT和C#编译器上。引用:毫无疑问,这将使一些开发人员感到惊讶……下载框架服务包,重新编译,运行您的应用程序,现在您将获得IP_ON_HEAP异常。

将以下内容添加到Visual Studio中的发布版本中,关闭exe的DEP,一切都会按预期进行:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"

-3

关于怀特霍克接受的答案。我只是想增加一些实践经验。只是想添加评论,但SO抱怨它太长了。

基本上,没有安装IE 9,注册表开关FEATURE_BROWSER_EMULATION根本无法使用。

例如,根据我今天的经验,我试图使.net webcontrol能够与IE10模式一起使用,因为我要渲染的一个html在VS2012下无法与.netControl一起使用,甚至在将html加载到IE8时也无法正常工作。直接,仍然css将无法正确呈现(即使我说允许被阻止的内容)。但是我已经在朋友的Win 8机器上用IE10测试了相同的html ok。这就是为什么我试图将.net webControl设置为IE 10模式,但一直失败的原因...

现在我认为这是bcos,我的win 7机器仅安装了IE8,因此无论我将哪个值设置为FEATURE_BROWSER_EMULATION开关(值设置为IE9,IE10 IE11),它都根本无法使用!

然后,我在win 7机器上下载并安装了IE 10。仍然不起作用,然后我添加了FEATURE_BROWSER_EMULATION,它开始起作用!

我也注意到无论我设置了哪个值,即使默认情况下将其设置为0,webControl仍在使用IE 10模式,该模式对我仍然有效。

总结一下,如果您已安装IE X,但希望.Net webControl在IE(X + N)N> 0 modo下工作,则需要做两件事

  1. 转到MS网站并下载并在计算机上安装IE(X + N),安装后需要重新启动。

  2. 应用怀特霍克的答案。

基本上:要通过使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,然后将该值设置为与所需的设置相匹配。

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8及更高版本。FEATURE_BROWSER_EMULATION功能定义Internet Explorer的默认仿真模式,并支持以下值。

值说明

  • 11001(0x2AF9 Internet Explorer11。无论!DOCTYPE指令如何,网页均以IE11边缘模式显示。

    11000(0x2AF8)IE11。包含基于标准!​​DOCTYPE指令的网页以IE11边缘模式显示。IE11的默认值。

    10001(0x2711)Internet Explorer10。无论!DOCTYPE指令如何,网页均以IE10标准模式显示。

    10000(0x02710)Internet Explorer10。包含基于标准!​​DOCTYPE指令的网页以IE10标准模式显示。Internet Explorer 10的默认值。

    9999(0x270F)Windows Internet Explorer9。无论!DOCTYPE指令如何,网页均以IE9标准模式显示。

    9000(0x2328)Internet Explorer9。包含基于标准的!DOCTYPE指令的网页以IE9模式显示。Internet Explorer 9的默认值。

    重要说明在Internet Explorer 10中,包含基于标准!​​DOCTYPE指令的网页以IE10标准模式显示。

    8888(0x22B8)网页以IE8标准模式显示,无论!DOCTYPE指令如何。

    包含基于标准!​​DOCTYPE指令的8000(0x1F40)网页以IE8模式显示。Internet Explorer 8的默认值重要说明在Internet Explorer 10中,包含基于标准!​​DOCTYPE指令的网页以IE10标准模式显示。

    包含基于标准的!DOCTYPE指令的7000(0x1B58)网页以IE7标准模式显示。托管WebBrowser控件的应用程序的默认值。

完整的参考这里


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.-这是错误的。我只安装了IE8,并且可以完美地使用该开关将webbrowser置于不同的呈现模式。
GSerg 2014年

我已经尝试安装IE8,试图获得IE10模式,将根本无法工作!刚刚再试一次,没有起作用
Gob00st 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.