WebBrowser
控件。 所以我的问题是,
WebBrowser
控件是否将显示IE9的所有属性和功能? 我担心的是,我想在上面绘制一些SVG图形。
#1 楼
与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)-网页以IE8标准模式显示,
无论!DOCTYPE指令如何。
基于标准的!DOCTYPE指令
以IE8模式显示。
基于标准的!DOCTYPE指令
的网页以IE7标准模式显示。
完整文档:
http://msdn.microsoft.com/zh-cn/library/ee330730%28VS.85%29 .aspx#browser_emulation
#2 楼
WebBrowser控件将使用您安装的任何版本的IE,但出于兼容性原因,默认情况下它将以IE7标准模式呈现页面。如果要利用IE9的新功能,则应在HTML页面的
<meta http-equiv="X-UA-Compatible" content="IE=9" >
标记内添加元标记<head>
。 必须同时添加此meta标记,然后
<head>
中的CSS,JavaScript文件等链接也才能正常工作(只有其他<meta>
标记或<title>
标记可以出现在它之前)。 替代方法是将注册表项添加到:
HKLM>软件>微软> Internet Explorer>主页> FeatureControl> FEATURE_BROWSER_EMULATION
然后在其中添加值为“ 9000”的“ myApplicationName.exe”,以强制WebBrowser控件以IE9模式显示页面。尽管您也可以使用其他值,但请注意,这些文档并不完全准确,因为无论您使用什么值,都无法以IE 8模式呈现页面。
将注册表项添加到HKCU中的相同路径而不是HKLM也将起作用-这很有用,因为写入HKLM需要管理员特权,而HKCU则不需要。
评论
可以在这里找到内容部分的不同值:msdn.microsoft.com/zh-cn/library/ie/ms533876(v=vs.85).aspx
– K B
2012年2月1日下午13:06
如果此设置可以存储在CSS文件中,我会更高兴。现在,我必须阅读许多文档,或者Visual Studio中是否有多行搜索和替换功能?
– K B
2012年2月2日在15:23
我尝试了meta标记,但是它不起作用。我收到一条错误消息,指出“ HTML1115:兼容X-UA的META标记('IE = 9'),因为文档模式已完成。”,这使我进入了网页evolpin.wordpress.com/2011/02/ 25 /…。解决方案是确保meta标签是块内的第一个元素。
– Steg
2012年6月6日上午10:15
请注意,如果您在64位Windows上运行32位应用程序(称为32位MSIE),则应将注册表项添加到HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION代替。
– igordc
2012年9月8日18:36
我正在通过xsl / xslt渲染html,而regedit出于某些原因而无法正常工作……meta发挥了作用。谢谢!
–危险
2014-02-25 18:47
#3 楼
谢天谢地,我发现了这一点。以下内容非常重要:<meta http-equiv="X-UA-Compatible" content="IE=9" >
没有这个,尽管在IE8上运行良好,但我生成的所有报告都无法在IE9安装后运行。它们将正确显示在Web浏览器控件中,但是当我调用.Print()时,会出现字母丢失,空白现象等现象。它们只是基本的HTML,即使在Mosaic中也应能够呈现。 heh不知道为什么IE7兼容模式会变成麻烦。值得注意的是,您可以在同一页面上进行.Print()5次,并且每次都丢失不同的字母。它甚至可以保留到PDF输出中,因此绝对是浏览器。
#4 楼
关于64位Windows的注释似乎使一些人感到困惑。如果您的应用程序在64位Windows下运行,则可能必须在[HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl下设置DWORD \ FEATURE_BROWSER_EMULATION]。
#5 楼
只是为了完整...对于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/zh-cn/library/ee330730(v=vs.85).aspx#browser_emulation
我将其更改为十进制11001或0x2AF9十六进制-(IE 11 EMULATION),因为这不是默认值(如果已安装IE 11或任何版本)。
MSDN文章包含有关影响Internet Explorer Web浏览器行为的其他几个注册表更改的说明。
评论
DWORD部分非常重要。 QWORD无效,并且很容易犯该错误。
– pvieira
2014年7月1日在18:25
我要补充一点,当您在VS下调试时,还应该为myappname.vshost.exe添加一个条目。另一方面,我怀疑只是从调试器中启动应用程序,然后在调试器中启动应用程序也可以解决问题。我认为它一次对我有用;但我不确定100%。
–爸爸蓝精灵
17年5月5日在10:12
由于我的IE11配置,我需要打开IE11并将目标URL添加到我的受信任站点。没有这个,即使我的注册表被正确配置,页面脚本也不会运行。
–托尼
18年3月21日在20:07
#6 楼
我知道该线程很旧,并且已经有了全面的答案。以防万一,如果您不知道以下内容:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
您不要不必将IE版本号硬编码为
<meta http-equiv="X-UA-Compatible" content="IE=9" >
评论
这与问题无关-WebBrowser控件仅在IE7模式下加载,除非用特定程序的注册表设置覆盖。
–基督徒
15年5月18日在8:48
@克里斯蒂安你确定吗?据我所知,如果网页的标题中包含,则webBrowser将以最新的IE模式加载。为什么有90多个支持mikel的答案?因为他的解决方案有效。如果可以更改网页,则无需更改注册表。
–泰勒·朗
2015年5月19日,0:31
我100%积极,但是我认为这也取决于网站的位置。我一直在加载本地内容,该版本发布的唯一方法是通过注册表。相信我,我会将注册表解决方案丢给其他任何可行的方法,但似乎没有其他可行的方法。
–基督徒
15年5月19日在19:40
ie = edge为我工作,而无需我触摸注册表。谢谢!
–伊斯洛尔·奥列夫斯基(Yisroel M. Olewski)
16-10-25在12:34
@Christian这确实与问题有关-解决方案效果很好。
– MarzSocks
17年2月1日在17:37
#7 楼
我完全同意所提供的解决方案,但我认为有必要作一些澄清。对于每个进程(另请参阅:vshost.exe,yourWinformApplication.exe.svchost或您的application.exe的名称)将需要添加具有提供的值的DWORD,在我的情况下,我在应用程序名称中保留9000(十进制),并且脚本运行流畅且没有错误。
最常见的错误是认为有必要按原样添加“ contoso.exe”并认为一切正常!
#8 楼
是的,WebBrowser控件使用您安装的任何版本的IE。这当然意味着,如果您在具有IE 8的计算机上运行应用程序,则您依赖的IE 9功能将不可用。评论
重新阅读我的答案。不需要投票。我说过,如果他尝试使用IE9功能,然后部署到没有IE9的计算机上,则这些功能将不起作用。您的向后兼容性注册表设置不会更改该事实。
–乔什
2011年3月19日19:39
您的第一句话显然是错误的。您的第二句话至少很明显而且很懒。顺便说一句,谢谢你的惩罚性投票。很成熟
–whitehawk
2011年4月8日在21:09
WebBrowser控件确实使用已安装的IE版本。但是检测脚本可能没有意识到这一点。试试这个[站点(whatismybrowser.com/)][1]。我知道其他站点给了我错误的信息,但是该站点正确地将浏览器标识为计算机上安装的IE版本。 [1]:whatismybrowser.com
–cjbarth
13年7月16日在18:19
#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]
#10 楼
我喜欢下面的(C#)代码,它为您的应用设置了注册表设置。尽管需要权限,但不确定是否会在安装后将其剪切。对我来说,它解决了WebSocket在WPF中的WebBrowser控件中不可用的问题。C#webbrowser Ajax调用
#11 楼
我遇到了同样的问题,这里的注册表回答不起作用。我在新版本的程序中使用了浏览器控件,该程序在XP上运行良好,但在Windows 7(64位)上失败了。
旧版本可在XP和Windows 7上运行。
浏览器中显示的网页使用了一些奇怪的插件来显示旧的SVG映射(我认为它是Java小程序)。 >
发现问题与Windows 7中的DEP保护有关。
旧版本的dotnet 2并未在exe中设置DEP required标志,而是从dotnet 2,SP 1中设置的。从那以后(确实,exe的编译行为以及运行时行为都根据您在哪台计算机上进行了更改而有所不同……)。
它记录在MSDN博客NXCOMPAT和C#编译器上。引用:毫无疑问,这将使一些开发人员感到惊讶...下载框架服务包,重新编译,运行您的应用程序,您现在会遇到IP_ON_HEAP异常。
将以下内容添加到构建中Visual Studio,为该exe关闭DEP,一切按预期进行:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
Editbin文档
Dumpbin
/headers
将在exe上显示DEP设置。#12 楼
关于怀特霍克接受的答案。我只是在尝试增加一些经验。只是想添加评论,但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),
安装后需要重新启动。
应用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。不论!DOCTYPE指令如何,网页均以IE11
边缘模式显示。
11000(0x2AF8)IE11。包含基于标准!DOCTYPE
指令的网页以IE11边缘显示。 IE11的默认值。
10001(0x2711)Internet Explorer10。无论!DOCTYPE指令如何,网页均以IE10
标准模式显示。
10000(0x02710)Internet Explorer10。包含基于
标准的!DOCTYPE指令的网页以IE10 Standards
模式显示。InternetExplorer 10的默认值。
IE9标准模式显示。
9000(0x2328)Internet Explorer 9。 ntaining
基于标准的!DOCTYPE指令以IE9模式显示。
Internet Explorer 9的默认值。
重要在Internet Explorer 10中,包含
standards-的网页基于Windows的!DOCTYPE指令以IE10标准模式显示。
8888(0x22B8)网页以IE8标准模式显示,
与!DOCTYPE指令无关。
8000(0x1F40)包含基于标准的!DOCTYPE指令的网页
以IE8模式显示。 Internet Explorer 8的默认值
重要在Internet Explorer 10中,包含基于
标准的!DOCTYPE指令的网页在IE10 Standards
模式下显示。
的网页以IE7标准模式显示。托管WebBrowser控件的应用程序的默认值。
此处完整引用
评论
如果未安装IE 9,则注册表开关EATURE_BROWSER_EMULATION根本无法使用。 -这是错误的。我只安装了IE8,并且可以完美地使用该开关将Webbrowser置于不同的呈现模式。
–GSerg
2014年3月22日在8:37
我已经尝试安装IE8,试图获得IE10模式,将根本无法工作!刚再试一次,没有用
– Gob00st
2014年4月3日在11:07
评论
安装IE 9后,似乎无法在IE 8模式下呈现页面。将值设置为7000将进入IE 7模式,而将8000/8888/9000/9999设置为IE 9模式。我是不知道这是某种错误还是故意的。
– Michael Low
2011年7月9日在1:58
我必须先将密钥添加到current_user和local_machine,然后才能对我起作用。但是之后成功了。
–莎拉·贝利(Sarah Bailey)
2015年2月5日在18:21
这篇博客文章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。
–理查德·钱伯斯(Richard Chambers)
19 Mar 25 '19在0:26