我最近升级到IE9-beta。现在,在我的.Net(3.5)WinForm应用程序中,我想使用WebBrowser
控件。
所以我的问题是,WebBrowser
控件是否会展示IE9的所有属性和功能?
我担心的是,我想在其上渲染一些SVG图形。
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
这是完整的代码集:
完整的文档:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
我喜欢下面的(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的运行时行为根据你编译的机器而改变,很好。 ..)。
它记录在MSDN博客NXCOMPAT and the C# compiler上。引用:这无疑会让一些开发人员感到惊讶...下载框架服务包,重新编译,运行您的应用程序,现在您正在获得IP_ON_HEAP异常。
将以下内容添加到Visual Studio中的后期构建中,将exe关闭为exe,并且一切都按预期工作:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
将在exe上显示DEP设置。关于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下工作,那么您需要做两件事:
基本上:要使用注册表控制此功能的值,请将可执行文件的名称添加到以下设置,并将值设置为与所需设置匹配。
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的默认模拟模式,并支持以下值。
价值描述
完全参考here
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则不需要。
谢天谢地,我找到了这个。以下内容非常重要:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
如果没有这个,尽管在IE8中工作得很好,但我所生成的报告都没有在IE9安装后发挥作用。它们会在Web浏览器控件中正确显示,但是当我调用.Print()时会出现丢失的字母,抬起的空格等。它们只是基本的HTML,即使在Mosaic中也应该能够呈现。嘿不知道为什么IE7兼容模式会变得混乱。值得注意的是,你可以.Print()同一页5次,并且每次都会丢失不同的字母。它甚至可以延续到PDF输出,所以它绝对是浏览器。
关于64位Windows的说明似乎让几个人绊倒了。如果您的应用程序在64位Windows下运行,则可能需要在[HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION]下设置DWORD。
只是为了完成......
对于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浏览器行为的其他几个注册表更改的注释。
我知道这个帖子已经老了,已经有了全面的答案。
万一你不知道这个:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
您不必将IE版本号硬编码为
<meta http-equiv="X-UA-Compatible" content="IE=9" >
我完全同意所提供的解决方案,但我认为有点澄清是重要的,我认为可能是必要的。
对于需要添加带有提供值的DWORD的每个进程(另请阅读:vshost.exe,yourWinformApplication.exe.svchost或application.exe的名称),在我的情况下,我在应用程序中留下9000(十进制)名称和运行顺利,无错误的脚本。
最常见的错误是认为有必要按原样添加“contoso.exe”并认为一切正常!
是的,WebBrowser控件使用您安装的任何IE版本。这当然意味着如果您在具有IE 8的计算机上运行应用程序,那么您所依赖的IE 9功能将无法使用。
我来到这个解决方案,它不适合我!因为我使用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]