作為開發(fā)人員,特別是作為Web的前端開發(fā)人員,最悲催的莫過于要不斷的,不斷的去調(diào)試各種瀏覽器的顯示效果,而這其中最讓人頭痛的莫過于MS下的IE系列瀏覽器,在IE系列中的調(diào)試我們將會發(fā)現(xiàn)沒有一個是好伺候的,于是不得不學(xué)習(xí)各種Hack技術(shù)來滿足各種瀏覽器之間的兼容。在這種痛苦中不斷的掙扎,MS可能也實在是看不下去了,于是在IE8開始,微軟引入了文檔兼容性,而這,終于可以讓前端的開發(fā)人員稍微能夠喘口氣。 文檔兼容性是對 Microsoft Internet Explorer 6 中引入的兼容性模式的擴展,使您可以選擇 Internet Explorer 用于顯示網(wǎng)頁的特定呈現(xiàn)模式。——微軟的官方文檔。 在這里先介紹兩個概念:瀏覽器模式(browser mode)和文檔模式(document mode)。這兩個模式的引入,讓我們在IE瀏覽器上能夠簡單的處理兼容性問題,當然,其實也并不簡單,先看看這兩個概念的定義: 瀏覽器模式(browser mode):于切換IE針對該網(wǎng)頁的默認文檔模式、對不同版本瀏覽器的條件備注解析、發(fā)送給網(wǎng)站服務(wù)器的用戶代理(User-Agent)字符串的值。網(wǎng)站可以根據(jù)瀏覽器返回的不同用戶代理字符串判斷瀏覽器的版本和安裝的功能,這樣就可以向不同的瀏覽器返回不同的頁面內(nèi)容。 默認情況下,IE8的瀏覽器模式為IE8。用戶可以通過單擊地址欄旁邊的兼容性視圖按鈕來手動切換到不同的瀏覽器模式。在IE8中,IE8兼容性視圖會以IE7文檔模式來顯示網(wǎng)頁,同時會向服務(wù)器發(fā)送IE7的用戶代理字符串。 文檔模式(document mode):用于指定IE的頁面排版引擎(Trident)以哪個版本的方式來解析并渲染網(wǎng)頁代碼。切換文檔模式會導(dǎo)致網(wǎng)頁被刷新,但不會更改用戶代理字符串中的版本號,也不會從服務(wù)器重新下載網(wǎng)頁。切換瀏覽器模式的同時,瀏覽器也會自動切換到相應(yīng)的文檔模式。 簡而言之:瀏覽器模式的改變,能夠改變請求中User Agent的值,讓服務(wù)器獲取后,能夠按照UA的值進行對應(yīng)處理(如果服務(wù)器上有這個處理功能)。而文檔模式的改變只反映在本地的瀏覽器解析HTML上,對客戶端顯示會有影響,而對服務(wù)器透明。同時,修改瀏覽器模式會影響文檔模式,反之卻不成立。 使用文檔兼容性的方法比較容易,就是在我們要反饋給客戶端的HTML代碼中的head中添加一個meta元素,用來描述當前的文檔需要使用何種瀏覽器版本來解釋當前文檔,代碼類似下面這樣:
X-UA-compatible在使用中,大小寫不敏感,如果你需要客戶端模擬其他的瀏覽器版本來解析文檔你可以設(shè)置為對應(yīng)的版本即可,通常的設(shè)置有如下幾種: 文檔兼容性設(shè)置 X-UA-compatible
當然,除了這之外,你還可以設(shè)置其他值,甚至可以是7.5這樣的數(shù)值(個人不建議),IE解釋的時候,會嘗試將數(shù)值轉(zhuǎn)為最接近的版本。chrome這個是使用Chrome插件來處理當前的文檔內(nèi)容,你也可以在HTML中插入下面的代碼,以便在用戶沒有安裝Chrome插件的時候,提醒用戶:
這樣在用戶訪問的時候,如果發(fā)現(xiàn)沒有安裝Chrome插件,就會提示安裝Chrome插件。 到這里,我們基本上已經(jīng)知道怎么使用X-UA-Compatible標頭了,讓我們更進一步! 其實,X-UA-Compatible不僅可以用meta元素放在頁面內(nèi),也可以在服務(wù)器上進行配置,比如在IIS上配置默認的Header,或者在使用.NET中配置web.config文件,讓服務(wù)器端配置上默認的標頭,這樣系統(tǒng)就有默認的標頭來指定全局的文檔模式。因為單個頁面的文檔模式設(shè)置會覆蓋默認的文檔模式,因此,在某個需要特殊的文檔模式展示的頁面可以在進行單獨配置meta元素即可。 在IIS7中的配置X-UA-Compatible標頭如下: |
|