再談IE的瀏覽器模式和文檔模式
以前在 “IE8兼容視圖(IE7 mode)與獨立IE7的區別”一文中曾經涉及過瀏覽器模式和文檔模式,但二者的區別卻不甚了了,現在有了新的認識,再補充一下。
1.瀏覽器模式與文檔模式概念
在較新的IE瀏覽器中(如IE8, IE9, IE10),為了解決兼容性的問題,引入了瀏覽器模式和文檔模式兩個概念,瀏覽網頁時可以通過按F12鍵看到這兩種模式。
瀏覽器模式的主要作用是為兼容較早版本的IE,它會控制瀏覽器發出的UserAgent,表示以哪個版本的瀏覽器發出請求,以此來允許為某個特定IE版本設計的代碼正確執行(舉例來說:有些代碼真是判斷ie版本的,還有css裏也有判斷ie版本的)。
文檔模式的主要作用是影響瀏覽器顯示網頁HTML的方式,在接到返回的HTML文件後,決定以哪個IE版本的文檔模式解析該頁面(舉例來說:JS腳本就是依賴文檔模式,IE9的js變化就需要IE9文檔模式來支持)。
2.如何使WebBrowser運行在IE9瀏覽器模式下
在安裝了IE9的計算機上,Webbrowser並不是直接運行在IE9模式下,而是默認工作在IE9兼容視圖(也就是IE7 Mode)下,為了讓Webbrowser工作在IE9下,需要修改註冊表,為應用程序指明使用IE9版本。
32位計算機需要修改註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION,增加YourApplication.exe,值為十進制9999。
64位計算機需要修改註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION,增加YourApplication.exe,值為十進制9999。
註意:9999最正確,9000則不推薦用,因為它不徹底。
3.如何使Htm頁面使用IE9文檔模式
如果htm頁面中沒有doctype,那麽WebBrowser將不會使用IE9文檔模式來解析頁面(哪怕已經設置了註冊表9999),而是仍沿用之前兼容舊版IE的 Quirks模來渲染,解釋頁面,JS腳本也將同樣處置。這樣的缺點是無法使用Html5新特性,優點是您的系統升級到IE9的兼容性改造工作將會大為減少。
修改Htm頁面的方法之一是,在Head->Title下添加<META http-equiv="X-UA-Compatible" content="IE=9" > </META>,這樣可確保HTM頁面工作在IE9標準文檔模式下。
註意:msdn上寫的關於9999可以無視doctype而自動使頁面運行在ie9文檔模式的說法是錯誤的,這一點已經得到了權威的認可。
4.總結
欲使你的系統作為整體(包括WebBrowser和Htm頁面)工作在IE9下,則以上2, 3兩步均需遵守,缺一不可。
5.360極速模式和兼容模式的優先使用
<META http-equiv="X-UA-Compatible" content="IE=9;webkit|ie-comp|ie-stand " >
代碼示例
在head標簽中添加一行代碼:
<html> <head> <meta name="renderer" content="webkit|ie-comp|ie-stand"> </head> <body> </body> </html>
content的取值為webkit,ie-comp,ie-stand之一,區分大小寫,分別代表用webkit內核,IE兼容內核,IE標準內核。
若頁面需默認用極速核,增加標簽:<meta name="renderer" content="webkit">
若頁面需默認用ie兼容內核,增加標簽:<meta name="renderer" content="ie-comp">
若頁面需默認用ie標準內核,增加標簽:<meta name="renderer" content="ie-stand">
再談IE的瀏覽器模式和文檔模式