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。

 

好的,言盡至此,無話可說了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章