web浏览器与IE的关系,如何设置web浏览器工作在IE9模式下?

一,问题的提出


偶然发现,Winform的里的web浏览器和IE浏览器实际安装的版本似乎并不同步,很有趣!

 

下面有张图,里面一个窗口是用IE9打开某网站,另一个窗口是用Winform的web浏览器+打开同样的网站,有意思的事情出现了。

在IE9窗口中,这个网站左边菜单树无法显示,原因是IE9使用的技术较新,而网站使用的技术较旧,未能及时同步更新到支持IE9所致。该如何办呢?

微软在IE9中提供一个兼容性视图功能,只要一点击兼容性视图就可以兼容旧版本浏览器的网站。


引用MSDN“为了克服潜在的兼容性问题,Internet Explorer支持一种称为兼容性视图的功能,允许用户在IE7模式下显示麻烦的页面。“URL:http//msdn.microsoft.com/en-us/library/dd567845(v = VS.85).aspx

也就是说,这个兼容模式就是IE7的模式。

 

又查了些MS资料,发现这个兼容性视图在IE8时首次引入,在IE9,IE10中都将继续支持。

 

再翻回来看的Winform + web浏览器这个窗口,它打开同样的网站却能显示左边菜单树,这样看来,似乎web浏览器不用设置就默认自动打开了兼容性视图模式。

 

现在就去仔细查一下权威资料,核实一下两个问题:
1.Webbrowser与IE到底是什么关系?是否确实用即内核,是否本质上和360安全浏览器,傲游浏览器和腾讯TT等IE内核浏览器相同
.2.Webbrowser是否使用兼容浏览模式,以及这个模式是否能改?

 

二,查询结果

1.webbrowser调用的就是本机IE9,并且webbrowser默认就是运行在IE7模式下,除非你改变它。

发现一个msdn的帖子,明确表示webbrowser调用的就是本机IE9,并且webbrowser默认就是运行在IE7模式下,除非你改变它。
如何使c#WebBrowser等同于IE浏览器
http://social.msdn.microsoft。 COM /论坛/ EN /的WinForms /线程/ 2ed65b9d-c601-4ca8-bde1-64584fc87515


没有任何消息来源备份的情况下,首先发布了如此大胆的主张。您可能应该阅读IE SDK(如果您想使用webbrowser控件需要阅读的手册)或者通过IE编程论坛(这是其他人经常在IE编程时遇到的地方),如果你想使用它webbrowser控件。

Webbrowser是IE API的包装器。没有多个版本的IE在同一台计算机上共存的东西。您将始终从webbrowser控件获取计算机上安装的唯一版本的IE。

默认IE和webbrowser之间有许多记录的设置差异。基本上你不必在webbrowser中选择可能破坏你的应用程序的新功能(Visual Studio团队在这里学到了一个很难的教训,当IE8打破Visual Studio的向导时),你必须编写代码来选择加入,除非改进是安全相关。这意味着除非您在功能控件中更改模式,否则webbrowser将以IE7模式运行。

请注意,某些网站声明了他们对IE7或IE8模式的要求。强制IE9模式可能不明智。

 

2.微软新闻组的一个帖子,没有IE的Webbrowser Control,里面明确提到,不装IE,无法用webbrowser。
http://groups.google.com/group/microsoft.public.vb.controls/browse_thread/thread/7575bd25e0730ded/aa40f3dfc799407d?lnk=gst&q=WebBrowser+ie#aa40f3dfc799407d

必须在机器上安装IE才能使用Webbrowser Control。

必须安装Internet Explorer才能使用WebBrowser控件。根本就没有ifs,ands或buts。如果未安装IE,您如何期望使用IE功能?

 

3.如何设置WebBrowser在IE9模式下工作呢?
答曰:需要修改注册表,具体看下面4,5,6,尤其6最全面,可以光看6。

 

4.WPF webbrowser控件使用IE7而不是IE9 
http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/4431908e-1869-4435-bcea-a3ec0820edfb

摘抄几句:
我如何使它所以WPF WebBrowser控件将使用IE9的浏览器引擎,而不是IE7?
我有一些HTML在WebBrowser控件中的呈现方式与IE9浏览器中的呈现方式不同。当我在WebBrowser中运行以下javascript时,结果为“7”。就像在IE7中一样。

我发现Rick Strahl的一篇文章描述了将使WebBrowser使用IE9的注册表设置。但我想避免这种情况。我很想知道IE7是如何使用的.http://www.west-wind.com/weblog/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version 
回答:您想避免为webbrowser主机设置文档兼容模式的唯一记录方法吗?为什么?

 

5.WebBrowser和CSS3?
http://social.msdn.microsoft.com/Forums/en-AU/winforms/thread/1b656af7-bda9-47d9-8f9a-1d886d3688ca
默认情况下,Web浏览器控件以兼容模式运行,除非您设置功能浏览器仿真注册表项。事实上,IE9能够正确渲染CSS3并且浏览器控制似乎并不表明浏览器控制没有在IE9标准模式下运行。

您需要设置此链接中描述的浏览器仿真功能密钥(FEATURE_BROWSER_EMULATION)http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx

您可以使用9000值,除非您要为所有页面强制使用IE 9标准模式。如果以后,您需要使用9999。

HKLM

如果使用hklm和64bit机器,则需要检查是否需要更改Wow6432Node。

最后,您需要在注册表项中添加进程名称托管浏览器控件作为值名称。

Windows注册表编辑器版本5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION] 
“prevhost.exe”= dword:00001f40 
“sllauncher.exe”= dword:00001f40 
“WindowsFormsApplication1.exe”= dword:0000270f

 

6.Web浏览器控制 - 指定IE版本
http://www.west-wind.com/weblog/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version

我在很多应用程序中使用Internet Explorer Web浏览器控件来显示文档类型布局。HTML恰好是最常见的文档格式之一,以这种格式显示数据 - 即使在桌面应用程序中,通常比使用普通桌面技术更容易。

Web浏览器控件的一个问题是它默认情况下一直停留在IE 7渲染模式中。即使IE 8和现在9已经显着升级了IE渲染引擎,默认情况下CSS浏览器和HTML兼容,但Web浏览器控件也没有。特别是IE 9 - 凭借其大大改进的CSS支持和基本的HTML 5支持是一个很大的改进,即使IE控件使用IE的一些内部渲染技术,它仍然停留在旧的IE 7渲染默认情况下。

无论您是在WPF应用程序,WinForms应用程序,使用ActiveX控件的FoxPro或VB经典应用程序中使用Web浏览器控件,这都适用。在幕后,所有这些UI平台都使用COM接口,因此您会被这些相同的规则所困扰。

通过注册表黑客进行功能委派
幸运的是,从Internet Explore 8及更高版本开始,通过注册表设置可以解决此问题。您可以指定注册表项以指定该应用程序应使用哪种呈现模式和IE版本。这些并不是全球性的想法 - 必须为每个应用程序单独启用它们。

32位和64位应用程序有两组不同的键。

32位:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION

值键:yourapplication.exe

64位:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION

值键:yourapplication.exe

该值指定IE版本如下:

将此键设置为的值(取自此处的 MSDN )为十进制值:

11001(0x2AF9)
Internet Explorer 11.网页以IE11标准模式显示,与!DOCTYPE指令无关。

11000(0x2AF8)
Internet Explorer 11.包含基于标准的网页!DOCTYPE指令以IE11模式显示。

10001(0x2AF7)
Internet Explorer 10.网页以IE10标准模式显示,与!DOCTYPE指令无关。

10000(0x2710)
Internet Explorer 10.包含基于标准的网页!DOCTYPE指令以IE10模式显示。

9999(0x270F)
Internet Explorer 9.网页以IE9标准模式显示,与!DOCTYPE指令无关。

9000(0x2328)
Internet Explorer 9.包含基于标准的网页!DOCTYPE指令以IE9模式显示。

8888(0x22B8)
网页以IE8标准模式显示,与!DOCTYPE指令无关。

8000(0x1F40)
包含基于标准的网页!DOCTYPE指令以IE8模式显示。

7000(0x1B58)
包含基于标准的网页!DOCTYPE指令以IE7标准模式显示。这种模式毫无意义,因为它是默认的。

通过设置这些密钥,您的应用程序可以轻松地在计算机上使用最新的Internet Explorer版本。不幸的是,似乎没有一个密钥说使用已安装的最新版本 - 不幸的是你必须具体说明该版本。鉴于Windows 7及更高版本可以运行IE 11,我要求用户使用IE 11,如果我想使用HTML5和更高级的CSS功能,如Flexbox,但如果您的内容更简单,您可能可以使用IE 10或甚至IE 9。

 

好的,言尽至此,无话可说了!

猜你喜欢

转载自blog.csdn.net/bluecard2008/article/details/83744374
今日推荐