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

问题描述 投票:82回答:12

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

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

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

c# .net-3.5 browser webbrowser-control internet-explorer-9
12个回答
82
投票

WebBrowser控件的IE9“版本”,如IE8版本,实际上是几个浏览器中的一个。与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 Explorer 9.无论使用何种!DOCTYPE指令,网页都以IE9标准模式显示。
  • 9000(0x2328) - Internet Explorer 9.包含基于标准的网页!DOCTYPE指令以IE9模式显示。
  • 8888(0x22B8) - 无论!DOCTYPE指令如何,网页都以IE8标准模式显示。
  • 8000(0x1F40) - 包含基于标准的网页!DOCTYPE指令以IE8模式显示。
  • 7000(0x1B58) - 包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。

完整的文档:

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


1
投票

我喜欢下面的(C#)代码,它设置了应用程序的注册表设置。如果需要权限,不确定它是否会在安装后切断它。对我来说,它解决了WebSocket在WPF中的WebBrowser控件内不可用的问题。

C# webbrowser Ajax call


1
投票

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

我在我的程序的新版本中有一个浏览器控件在XP上工作正常,在Windows 7(64位)中失败。旧版本适用于XP和Windows 7。

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

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

旧版本的dotnet 2没有在exe中设置DEP required标志,但是从dotnet 2,SP 1开始它就完成了(是的,编译行为,因此exe的运行时行为根据你编译的机器而改变,很好。 ..)。

它记录在MSDN博客NXCOMPAT and the C# compiler上。引用:这无疑会让一些开发人员感到惊讶...下载框架服务包,重新编译,运行您的应用程序,现在您正在获得IP_ON_HEAP异常。

将以下内容添加到Visual Studio中的后期构建中,将exe关闭为exe,并且一切都按预期工作:

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

-3
投票

关于whitehawk接受的答案。我只想尝试增加一点经验。只是试图添加评论,但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. 应用whitehawk的答案。

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

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 Explorer 11.网页以IE11边缘模式显示,与!DOCTYPE指令无关。 11000(0x2AF8)IE11。包含基于标准的网页页面!DOCTYPE指令以IE11边缘模式显示。 IE11的默认值。 10001(0x2711)Internet Explorer 10.网页以IE10标准模式显示,与!DOCTYPE指令无关。 10000(0x02710)Internet Explorer 10.包含基于标准的网页!DOCTYPE指令以IE10标准模式显示。 Internet Explorer 10的默认值。 9999(0x270F)Windows Internet Explorer 9.无论使用何种!DOCTYPE指令,网页都以IE9标准模式显示。 9000(0x2328)Internet Explorer 9.包含基于标准的网页!DOCTYPE指令以IE9模式显示。 Internet Explorer 9的默认值。 重要信息在Internet Explorer 10中,包含基于标准的!DOCTYPE指令的网页以IE10标准模式显示。 8888(0x22B8)网页以IE8标准模式显示,与!DOCTYPE指令无关。 8000(0x1F40)包含基于标准的网页!DOCTYPE指令以IE8模式显示。 Internet Explorer 8的默认值重要说明在Internet Explorer 10中,包含基于标准的!DOCTYPE指令的网页以IE10标准模式显示。 7000(0x1B58)包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。托管WebBrowser控件的应用程序的默认值。

完全参考here


125
投票

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

如果您想利用新的IE9功能,您应该在HTML页面的<meta http-equiv="X-UA-Compatible" content="IE=9" >标记内添加元标记<head>

这个元标记必须在任何指向CSS,JavaScript文件等的链接之前添加,这些链接也在你的<head>中才能正常工作(只有其他<meta>标签或<title>标签可以在它之前)。

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

HKLM>软件> Microsoft> Internet Explorer> Main> FeatureControl> FEATURE_BROWSER_EMULATION

并在那里添加值为'9000'的'myApplicationName.exe'以强制WebBrowser控件以IE9模式显示页面。虽然也有other values you can use too,但请注意这些文档并不完全准确,因为无论您使用什么值,都无法在IE 8模式下呈现页面。

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


24
投票

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

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

如果没有这个,尽管在IE8中工作得很好,但我所生成的报告都没有在IE9安装后发挥作用。它们会在Web浏览器控件中正确显示,但是当我调用.Print()时会出现丢失的字母,抬起的空格等。它们只是基本的HTML,即使在Mosaic中也应该能够呈现。嘿不知道为什么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/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

我改为11001十进制或0x2AF9十六进制---(IE 11仿真),因为那不是DEFAULT值(如果您安装了IE 11 - 或任何版本)。

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


14
投票

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

万一你不知道这个:

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

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

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


6
投票

我完全同意所提供的解决方案,但我认为有点澄清是重要的,我认为可能是必要的。

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

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


3
投票

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


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]
© www.soinside.com 2019 - 2024. All rights reserved.