轉載:http://www.cnblogs.com/1175429393wljblog/p/5398928.html
最近為了抓取淘寶的成交數據,用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) 00000000
360瀏覽器,傲游瀏覽器,淘寶瀏覽器等都可以用這種方式來操作.
注意: 我使用VS2010編譯的時候,如果是Debug模式,那么我在注冊表中更改的內容無效;如果使用了Release模式,則注冊表的內容立即生效!
。。。。。。。
今天在調試程序的時候,需要使用C#的客戶端遠程登錄一個Web頁面,用到了WebBrowser控件。但是卻發現了一件很神奇的事情:
當前瀏覽器使用的內核,可以通過訪問下面這個網站獲取:http://ie.icoa.cn/
我的IE版本為IE8,在使用IE登錄頁面的時候,使用的內核是IE8,登錄該網站的截圖如下:

但是當我用WebBrowser登錄該頁面時,顯示使用的內核卻是IE7:

上圖的程序是一個測試程序,僅包含一個WebBrowser,這個程序的名稱是TestWebBrowser.exe。可以發現,雖然同為Trident內核,但在WebBrowser控件中使用的內核版本卻與IE不一樣,這讓我感到疑惑。因為我要登錄的頁面是針對IE8以上版本開發的,因此我需要嘗試讓程序內的WebBrowser以IE8的內核登錄網頁。
在網上找了一些資料后,我發現可以通過下面這個辦法來解決:
1、在開始菜單內輸入“regedit.exe”,進入注冊表編輯器
2、找到注冊表項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
3、在右側空白區域內單擊鼠標右鍵,點擊【新建】→【DWORD(32-位)值】

4、新建的項取名為TestWebBrowser.exe,編輯值時,選擇基數“十進制”,填寫數值數據,這里填寫8888

5、這個時候再進入Debug目錄下生成好的TestWebBrowser,可以看到登錄的內核版本變成IE8了!

需要注意的是,在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