我最近升级到IE9-beta。现在,在我的.Net(3.5)WinForm应用程序中,我想使用WebBrowser
控件。
所以我的问题是,WebBrowser
控件是否会展示IE9的所有属性和功能?
我担心的是,我想在其上渲染一些SVG图形。
答案 0 :(得分:125)
WebBrowser控件将使用您安装的任何IE版本,但出于兼容性原因,默认情况下它将以IE7标准模式呈现页面。
如果您想利用新的IE9功能,则应在HTML页面的<meta http-equiv="X-UA-Compatible" content="IE=9" >
标记内添加元标记<head>
。
此元标记必须先添加到<head>
中的CSS,JavaScript文件等任何链接,以便正常工作(只有其他<meta>
标记或<title>
标记可以来吧)。
另一种方法是将注册表项添加到:
HKLM&gt;软件&gt;微软&gt; Internet Explorer&gt;主要&gt; FeatureControl&gt; FEATURE_BROWSER_EMULATION
在那里添加值为'9000'的'myApplicationName.exe'以强制WebBrowser控件以IE9模式显示页面。虽然还有other values you can use too,但请注意这些文档并不完全准确,因为无论您使用何种值,都无法在IE 8模式下呈现页面。
将注册表项添加到HKCU中的相同路径而不是HKLM也会起作用 - 这很有用,因为写入HKLM需要管理员权限,而HKCU则不需要。
答案 1 :(得分:81)
WebBrowser控件的IE9“版本”,就像IE8版本一样,实际上是几个浏览器中的一个。与IE8版本不同,您可以通过更改doctype来更好地控制页面内的呈现模式。当然,要更改浏览器模式,您必须像早期的答案一样设置注册表。这是FEATURE_BROWSER_EMULATION的注册文件片段:
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/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
答案 2 :(得分:24)
谢天谢地,我找到了这个。以下内容非常重要:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
如果没有这个,尽管在IE8中运行良好,但我生成的报告都没有在IE9安装后发挥作用。它们会在Web浏览器控件中正确显示,但是当我调用.Print()时,会丢失字母,抬起空格等。它们只是基本的HTML,即使在Mosaic中也应该能够呈现。嘿不知道为什么IE7兼容模式会变得混乱。值得注意的是,您可以.Print()相同的页面5次,并且每次都会丢失不同的字母。它甚至会延续到PDF输出,所以它绝对是浏览器。
答案 3 :(得分:17)
关于64位Windows的说明似乎让几个人绊倒了。 如果您的应用程序在64位Windows下运行,则可能需要在[HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION]下设置DWORD。
答案 4 :(得分:16)
要完成......
对于32位操作系统,您必须将注册表项添加到:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
******* ******* OR
对于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浏览器行为的其他几个注册表更改的注释。
答案 5 :(得分:14)
我知道这个帖子已经过时了,已经有了全面的答案。
万一你不知道:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
您不必将IE版本号硬编码为
<meta http-equiv="X-UA-Compatible" content="IE=9" >
答案 6 :(得分:6)
我完全同意所提供的解决方案,但我认为我认为可能有必要进行一些澄清。
对于每个进程(另请阅读:vshost.exe,yourWinformApplication.exe.svchost或application.exe的名称),需要添加一个带有提供值的DWORD,在我的情况下,我留下9000(十进制) )在应用程序名称和运行顺利和无错误的脚本。
最常见的错误是认为有必要按原样添加“contoso.exe”并认为一切正常!
答案 7 :(得分:3)
是的,WebBrowser控件使用您安装的任何IE版本。这当然意味着如果您在使用IE 8的计算机上运行应用程序,那么您所依赖的IE 9功能将无法使用。
答案 8 :(得分: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]
答案 9 :(得分:1)
我喜欢下面的(C#)代码,它设置了应用的注册表设置。如果需要权限,不确定它是否会在安装后切断它。对我来说,它解决了WebSocket在WPF中的WebBrowser控件中不可用的问题。
答案 10 :(得分: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关闭DEP,一切都按预期工作:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
将在exe上显示DEP设置。答案 11 :(得分:-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&gt; 0 modo,两件事下工作:
转到MS网站&amp;在您的机器上下载并安装IE(X + N), 您需要在安装后重新启动。
应用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.网页显示在 IE9标准模式,不管!DOCTYPE指令。
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