存档

文章标签 ‘web browser’

Web Browser控件强制以IE 9 模式渲染

2012年5月14日 没有评论

其实一直一来我都认为 web browser  控件是和系统的 IE 版本保持一致的。以前在写某一个 Windows Gadget 的时候,发现系统用的是 IE 7 的模式进行渲染,而我的机器上明明安装的是 IE 9,当时感觉这个现象简直颠覆了我以往的概念,于是大惊小怪的@屈屈同学。

然后再另外的一个项目里又使用了web browser  控件,把 userAgent 打印出来,一样地显示 IE7 ,很是不甘心呀。

今天终于发现了原因。其实 web browser 和 IE 并非完全一样。如果应用里使用了 web browser 控件,系统会默认使用 IE 7,也就是 IE 8的兼容模式来渲染页面,即使当前 IE 版本已经到了 9。

如果想要强制使用最新的渲染模式的话,需要修改注册表,在 FEATURE_BROWSER_EMULATION 下面添加自己的键值。我这里以实际的思路举例,需要说明的是,由于工作的原因,我这里只需要关注最新版本的 IE,当前最新的是 IE 9。

1、安装包在安装的时候,先从注册表里获取到系统的IE 版本号,如果是 IE 8 以下,就跳过本逻辑。版本号的获取可以从这里读取:
32位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
64位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer

键 svcVersion 对应的值即为 IE 的版本号

2、在注册表对应的位置创建键值,键为用到 web browser 控件的程序的名称,例如 LenovoProductQuery.exe (不需要完整的路径,带扩展名的完整文件名就可以了),值为第一步获取到的版本值。MSDN 上显示一共有 5 个枚举值,可以根据实际情况来设置,例如 十进制的9。注册表的位置为:
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

4、卸载的时候移除对应的键值即可。

======枚举说明======
9999 (0x270F)
Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.

9000 (0x2328)
Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.

8888 (0x22B8)
Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.

8000 (0x1F40)
Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.

7000 (0x1B58)
Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

就眼下的技术来说,要用到的是 9999 和 9000。我英文不好,也不知道是否翻译的正确,9999 是说所有的页面都会以 IE 9 标准模式渲染;而9000 是说只有以标准写法的才会以IE 9方式渲染。要在这2个值间如何取值大家自己衡量好了。

更多具体的枚举,请参考微软的定义。

分类: 日常 标签: , ,