我最近升级到IE9-beta。现在,在我的.Net(3.5)WinForm应用程序中,我想使用WebBrowser
控件。
所以我的问题是,该WebBrowser
控件是否将显示IE9的所有属性和功能?
我担心的是,我想在上面渲染一些SVG图形。
Answers:
与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
这是完整的代码集:
完整的文档:
http://msdn.microsoft.com/zh-CN/library/ee330730%28VS.85%29.aspx#browser_emulation
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
。
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则不需要。
只是为了完整...
对于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浏览器行为的其他几个注册表更改的注释。
我知道这个主题很旧,已经有了全面的答案。
以防万一您不知道这一点:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
您不必将IE版本号硬编码为
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
在标题中,则webBrowser将以最新的IE模式加载。为什么有90多个支持mikel的答案?因为他的解决方案有效。如果可以更改网页,则无需更改注册表。
是的,WebBrowser控件使用您安装的任何版本的IE。这当然意味着,如果您在具有IE 8的计算机上运行应用程序,则您依赖的IE 9功能将不可用。
我喜欢下面的(C#)代码,它为您的应用设置了注册表设置。尽管需要权限,但不确定是否会在安装后将其剪切。对我来说,它解决了WebSocket在WPF中的WebBrowser控件中不可用的问题。
我遇到了同样的问题,这里的注册表答案不起作用。
我的程序的新版本中有一个浏览器控件,该控件在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)"
关于怀特霍克接受的答案。我只是想增加一些实践经验。只是想添加评论,但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下工作,则需要做两件事:
转到MS网站并下载并在计算机上安装IE(X + N),安装后需要重新启动。
应用怀特霍克的答案。
基本上:要通过使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置中,然后将该值设置为与所需的设置相匹配。
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置于不同的呈现模式。