最近爲了抓取淘寶的成交數據,用C#的WebBrowser控件開發了一個簡單的程序.
發現WebBrowser控件默認使用的版本是IE7的兼容模式.而淘寶的寶貝詳細頁竟然對IE7的支持不是很好.
成交記錄沒法顯示,而我本機安裝的是IE10,那麼有沒有辦法使個人WebBrowser控件的使用的IE版本高點呢?
查找到了MSDN的一篇文章,上面有詳細的說明,簡單翻譯以下:
1,打開註冊表
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 00000000
其中的"contoso.exe"爲您的程序名字.即嵌入了WebBrowser控件的可執行程序的名字.
後面的數值"00000000"表明WebBrowser控件使用的IE的版本,值對應的IE版本以下圖:
若是您使用的是64位的操做系統,而你的程序是32位的,那麼你則要在如下注冊表中更改該值.
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Wow6432Note
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION瀏覽器
contoso.exe = (DWORD) 00000000app
360瀏覽器,傲遊瀏覽器,淘寶瀏覽器等均可以用這種方式來操做.less
注意: 我使用VS2010編譯的時候,若是是Debug模式,那麼我在註冊表中更改的內容無效;若是使用了Release模式,則註冊表的內容當即生效!編輯器
上圖的程序是一個測試程序,僅包含一個WebBrowser,這個程序的名稱是TestWebBrowser.exe。能夠發現,雖然同爲Trident內核,但在WebBrowser控件中使用的內核版本卻與IE不同,這讓我感到疑惑。由於我要登陸的頁面是針對IE8以上版本開發的,所以我須要嘗試讓程序內的WebBrowser以IE8的內核登陸網頁。ui
在網上找了一些資料後,我發現能夠經過下面這個辦法來解決:操作系統
一、在開始菜單內輸入「regedit.exe」,進入註冊表編輯器翻譯
二、找到註冊表項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
三、在右側空白區域內單擊鼠標右鍵,點擊【新建】→【DWORD(32-位)值】
須要注意的是,在VS內以調試的方法進入程序,打開的程序其實是TestWebBrowser.vshost.exe,並不能看到效果,必需要打開Debug目錄下的TestWebBrowser.exe,才能發現內核版本的改變。以前WebBrowser使用IE7內核的緣由,就是.NET中的WebBrowser控件默認使用了IE7兼容性模式來瀏覽網頁。
若是想要直接運行程序時就能夠看到效果(即打開的程序其實是TestWebBrowser.vshost.exe),那還須要修改一個位置,即
(
Microsoft.Win32.Registry.LocalMachine
SOFTWARE
\Wow6432Node\
Microsoft
\Internet Explorer\
MAIN\
FeatureControl\
FEATURE_BROWSER_EMULATION
)只要這個進行修改就能夠了。能夠測試看看啦。。。。
一一一一一一一一一分割線一一一一一一一一一
上面這個方法依靠修改註冊表來完成WebBrowser使用內核的變動,不過光知道新建一個註冊表項並把值設置爲「8888」還遠遠不夠,本着「知其然還要知其因此然」的想法,我查閱了相關的MSDN頁面:https://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx
這個頁面的標題是:Internet Feature Controls (B..C),即互聯網功能控制,咱們要找的章節是「Browser Emulation」(瀏覽器仿真)。原來自從IE8之後,在註冊表中添加了FEATURE_BROWSER_EMULATION功能,這個功能是用來定義IE默認的仿真模式。
這個功能在註冊表中的位置以下:
該註冊表項的各可能取值描述以下(原文見MSDN,純手工翻譯,若有不足之處歡迎指出)
Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
包含標準!DOCTYPE指令的頁面將會以IE7兼容模式打開。WebBrowser控件的默認值。
Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
包含標準!DOCTYPE指令的頁面將會以IE8兼容模式打開,IE8瀏覽器的默認值。對於IE10來講,包含標準!DOCTYPE指令的頁面會以IE10兼容模式打開。
Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
不管是否聲明!DOCTYPE指令,頁面以IE8兼容模式打開。對於未正確聲明!DOCTYPE指令的頁面,將會以怪異模式(quirks mode)加載。
Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
IE9,包含標準!DOCTYPE指令的頁面將會以IE9兼容模式打開,IE9瀏覽器的默認值。對於IE10來講,包含標準!DOCTYPE指令的頁面會以IE10兼容模式打開。
Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE9,不管是否聲明!DOCTYPE指令,頁面以IE9兼容模式打開。對於未正確聲明!DOCTYPE指令的頁面,將會以怪異模式(quirks mode)加載。
Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
IE10,包含標準!DOCTYPE指令的頁面將會以IE10兼容模式打開,IE10瀏覽器的默認值。
Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
IE10,不管是否聲明!DOCTYPE指令,頁面以IE10兼容模式打開。
IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
IE11,包含標準!DOCTYPE指令的頁面將會以IE11兼容模式打開,IE11瀏覽器的默認值。
Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
IE11,不管是否聲明!DOCTYPE指令,頁面將會以IE11的edge模式打開。對於未正確聲明!DOCTYPE指令的頁面,將會以怪異模式(quirks mode)加載。
END