VB.NET浏览器第8坑 取消兼容模式

webbrowser默认是相当于IE开启了兼容模式(相当于IE7),所以在浏览某些网站的时候页面是乱的,具体影响网页的样式。

如何取消兼容模式,做到与IE普通模式同样的效果呢?许多教程提供的方法是在注册表中增加一项:

如果是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

在对应的目录下面新建一个键,键名是你的exe程序名,如果你的程序是abc.exe,这里就写abc.exe。键值类型是REG_DWORD

微信截图_20180127133204.png

键值可选值如下规定:

11001 (0x2EDF)IE11标准模式
11000 (0x2AF8)IE11,其中!DOCTYPE的网页使用IE9显示
10001 (0x2711)Internet Explorer 10。网页以IE 10的标准模式展现,页面!DOCTYPE无效
10000 (0x02710)Internet Explorer 10。在IE 10标准模式中按照网页上!DOCTYPE指令来显示网页。Internet Explorer 10 默认值。
9999 (0x270F)Windows Internet Explorer 9. 强制IE9显示,忽略!DOCTYPE指令
9000 (0x2328)Internet Explorer 9. Internet Explorer 9默认值,在IE9标准模式中按照网页上!DOCTYPE指令来显示网页。
8888 (0x22B8)Internet Explorer 8,强制IE8标准模式显示,忽略!DOCTYPE指令
8000 (0x1F40)Internet Explorer 8默认设置,在IE8标准模式中按照网页上!DOCTYPE指令展示网页
7000 (0x1B58)使用WebBrowser Control控件的应用程序所使用的默认值,在IE7标准模式中按照网页上!DOCTYPE指令来展示网页。

我个人感觉这种方式非常不好,一个显而易见的理由是:一个浏览器本来无需申请写注册表权限的(如果不设置默认浏览器),但是如果通过这种模式修改webbrowser版本将不得不申请注册表权限。更合理的方式是在创建控件的时候就指定内核的版本,这样还有一个好处是可以实现多内核切换,多内核共存,而无需关注注册表。