来设置IE兼容模式
來(lái)設(shè)置IE兼容模式
?
文件兼容性用于定義讓IE如何編譯你的網(wǎng)頁(yè)。此文件解釋文件兼容性,如何指定你網(wǎng)站的文件兼容性模式以及如何判斷一個(gè)網(wǎng)頁(yè)該使用的文件模式。
前言
為了幫助確保你的網(wǎng)頁(yè)在所有未來(lái)的IE版本都有一致的外觀,IE8引入了文件兼容性。在IE6中引入一個(gè)增設(shè)的兼容性模式,文件兼容性使你能夠在IE呈現(xiàn)你的網(wǎng)頁(yè)時(shí)選擇特定編譯模式。
新的IE為了確保網(wǎng)頁(yè)在未來(lái)的版本中都有一支的外觀,IE8引入了文件兼容性。當(dāng)你引入一個(gè)增設(shè)的兼容性模式,
此文章說(shuō)明文件兼容性的必要性,列出現(xiàn)有版本IE能使用的文件兼容性模式并示范如何選擇特定的兼容性模式。
認(rèn)識(shí)文件兼容性模式
IE8支持幾種文件兼容性模式,它們具有不同的特性并影響內(nèi)容顯示的方式。
?Emulate IE8 mode指示IE使用<!DOCTYPE>指令來(lái)決定如何編譯內(nèi)容。Standards mode指令會(huì)顯示成IE8 Standards mode而quirks mode會(huì)顯示成IE5 mode。不同于IE8 mode,Emulate IE8 mode重視<!DOCTYPE>指令。
?Emulate IE7 mode指示IE使用<!DOCTYPE>指令來(lái)決定如何編譯內(nèi)容。Standards mode指令會(huì)顯示成IE7 Standards mode而quirks mode會(huì)顯示成IE5 mode。不同于IE7 mode,Emulate IE7 mode重視<!DOCTYPE>指令。對(duì)于許多網(wǎng)頁(yè)來(lái)說(shuō)這是最推薦的兼容性模式。?
?IE5 mode 編譯內(nèi)容如同IE7的quirks mode之顯示狀況,和IE5中顯示的非常類似。?
?IE7 mode編譯內(nèi)容如同IE7的standards mode之顯示狀況,無(wú)論網(wǎng)頁(yè)是否含有<!DOCTYPE>指令。?
?IE8 mode提供對(duì)業(yè)界標(biāo)準(zhǔn)的最高支持,包含?W3C Cascading Style Sheets Level 2.1 Specification和W3C Selectors API,并有限的支持?W3C Cascading Style Sheets Level 3 Specification (Working Draft)。?
?Edge mode指示IE以目前可用的最高模式顯示內(nèi)容。當(dāng)使用IE8時(shí)其等同于IE8 mode。若(假定)未來(lái)放出支持更高兼容性模式的IE,使用Edge mode的頁(yè)面會(huì)使用該版本能支持的最高模式來(lái)顯示內(nèi)容。同樣的那些頁(yè)面在使用IE8瀏覽時(shí)仍會(huì)照常顯示。
由于edge mode使用該IE版本所能支持的最高模式來(lái)顯示所瀏覽的網(wǎng)頁(yè)內(nèi)容,建議僅使用于測(cè)試頁(yè)及其他非商用頁(yè)面。
指定文件兼容性模式
要為你的網(wǎng)頁(yè)指定文件模式,需要在你的網(wǎng)頁(yè)中使用meta元素放入X-UA-Compatible?http-equiv?標(biāo)頭。以下是指定為Emulate IE7 mode 兼容性之范例。
?
<html>
<head>
??<!--?Mimic?Internet?Explorer?7?-->
??<meta?http-equiv="X-UA-Compatible"?content="IE=EmulateIE7"?/>
??<title>My?Web?Page</title>
</head>
<body>
??<p>Content?goes?here.</p>
</body>
</html>?
其內(nèi)容隨著指定的頁(yè)面模式而更改,當(dāng)要模擬IE7時(shí),指定IE=EmulateIE7,指定IE=5,?IE=7, 或IE=8來(lái)選擇其中一種兼容性模式。你也可以指定IE=edge來(lái)指示IE8使用它支持的最高模式。
X-UA-compatible標(biāo)頭沒(méi)有大小寫之分。然而除了title元素及其他的meta元素之外,它必須出現(xiàn)在網(wǎng)頁(yè)header節(jié)其它元素之前的位置,
設(shè)定網(wǎng)站服務(wù)器以指定預(yù)設(shè)兼容性模式
網(wǎng)站管理員可籍著為網(wǎng)站定義一個(gè)自訂標(biāo)頭來(lái)為他們的網(wǎng)站預(yù)設(shè)一個(gè)特定的文件兼容性模式。這個(gè)特定的方法取決于你的網(wǎng)站服務(wù)器。舉例來(lái)說(shuō),下列的web.config文件使Microsoft Internet Information Services (IIS)能定義一個(gè)自訂標(biāo)頭以自動(dòng)使用IE7 mode來(lái)編譯所有網(wǎng)頁(yè)。
?
<?xml?version="1.0"?encoding="utf-8"?>
<configuration>
??<system.webServer>
????<httpProtocol>
??????<customHeaders>
????????<clear?/>
????????<add?name="X-UA-Compatible"?value="IE=EmulateIE7"?/>
??????</customHeaders>
????</httpProtocol>
??</system.webServer>
</configuration>?
若你已于網(wǎng)站服務(wù)器指定了一個(gè)預(yù)設(shè)的文件兼容性模式,你可以在個(gè)別頁(yè)面上指定不同的文件兼容性模式來(lái)蓋過(guò)它。在網(wǎng)頁(yè)中指定的模式優(yōu)先權(quán)高于服務(wù)器中所指定的模式。
判定文件兼容性模式
要判定網(wǎng)頁(yè)使用IE8瀏覽時(shí)的文件兼容性模式,使用document?object(文檔對(duì)象)的documentMode功能。例如在IE8的網(wǎng)址列輸入下列程式碼會(huì)顯示目前頁(yè)面的文件模式。
javascript:alert(document.documentMode);
?
documentMode功能會(huì)回傳一個(gè)數(shù)值對(duì)應(yīng)目前頁(yè)面的文件兼容性模式,舉例來(lái)說(shuō),若網(wǎng)頁(yè)指定為支持IE8模式,documentMode便會(huì)回傳值"8"。
在IE6引入的compatMode功能不支持在IE8引入的documentMode功能。目前使用compatMode建立的應(yīng)用程式還能在IE8中作用,但它們必須更新為使用documentMode。
若你希望使用JavaScript判定一個(gè)文件的兼容性模式,引入下面范例的這段程式碼可支持舊版本的IE。
?
engine?=?null;
if?(window.navigator.appName?==?"Microsoft?Internet?Explorer")
{
???//?This?is?an?IE?browser.?What?mode?is?the?engine?in?
???if?(document.documentMode)?//?IE8
??????engine?=?document.documentMode;
???else?//?IE?5-7
???{
??????engine?=?5;?//?Assume?quirks?mode?unless?proven?otherwise
??????if?(document.compatMode)
??????{
?????????if?(document.compatMode?==?"CSS1Compat")
????????????engine?=?7;?//?standards?mode
??????}
???}
???//?the?engine?variable?now?contains?the?document?compatibility?mode.
}
?
?
認(rèn)識(shí)內(nèi)容屬性值
內(nèi)容屬性值在接收到異于先前敘述的數(shù)值時(shí)是具有彈性的。這能使你對(duì)于IE如何顯示你的網(wǎng)頁(yè)更有操控性。舉例來(lái)說(shuō),你可以設(shè)定內(nèi)容屬性值為IE=7.5。當(dāng)你這樣做的時(shí)候,IE嘗試將這個(gè)值轉(zhuǎn)換為version vector并選擇最接近的結(jié)果。在這個(gè)例子中,IE會(huì)將其設(shè)定為IE7 mode。下面的范例顯示該模式設(shè)定為其他值的狀況。
?
<meta?http-equiv="X-UA-Compatible"?content="IE=4">???<!--?IE5?mode?-->
<meta?http-equiv="X-UA-Compatible"?content="IE=7.5">?<!--?IE7?mode?-->
<meta?http-equiv="X-UA-Compatible"?content="IE=100">?<!--?IE8?mode?-->
<meta?http-equiv="X-UA-Compatible"?content="IE=a">???<!--?IE5?mode?-->?
<!--?This?header?mimics?Internet?Explorer?7?and?uses?
?????<!DOCTYPE>?to?determine?how?to?display?the?Web?page?-->
<meta?http-equiv="X-UA-Compatible"?content="IE=EmulateIE7">??
注意:?前面的范例顯示單獨(dú)的內(nèi)容值。實(shí)際上IE只會(huì)執(zhí)行網(wǎng)頁(yè)中第一個(gè)X-UA-Compatible標(biāo)頭。
你也可以使用內(nèi)容屬性來(lái)指定復(fù)數(shù)的文件兼容性模式,這能幫助確保你的網(wǎng)頁(yè)在未來(lái)的瀏覽器版本都能一致的顯示。欲設(shè)定復(fù)數(shù)的文件模式,請(qǐng)?jiān)O(shè)定內(nèi)容屬性以判別你想使用的模式。使用分號(hào)來(lái)分開(kāi)各個(gè)模式。
如果一個(gè)特定版本的IE支持所要求的兼容性模式多于一種,將採(cǎi)用列于標(biāo)頭內(nèi)容屬性中最高的可用模式。你可以使用這個(gè)特性來(lái)排除特定的兼容性模式,雖然并不推薦這樣做。舉例來(lái)說(shuō),下列標(biāo)頭即會(huì)排除IE7 mode。
<meta?http-equiv="X-UA-Compatible"?content="IE=5;?IE=8"?/>
?
結(jié)論
兼容性對(duì)于網(wǎng)頁(yè)設(shè)計(jì)師來(lái)說(shuō)是非常重要的顧慮。雖然最好是可以建立一個(gè)完全不需依賴任何網(wǎng)頁(yè)瀏覽器特性或功能的網(wǎng)站,有時(shí)候這是不可能實(shí)現(xiàn)的。文件兼容性模式便能將網(wǎng)頁(yè)限制在某個(gè)特定版本的IE中。
使用X-UA-Compatible標(biāo)頭來(lái)指定你的頁(yè)面支持的IE版本。使用document.documentMode判定頁(yè)面的兼容性模式。
選擇支持某個(gè)特定版本的IE,你可以確保你的頁(yè)面在未來(lái)的瀏覽器版本中也能有顯示的一致性。
?
總結(jié)
- 上一篇: HDU 4628 Pieces(DP +
- 下一篇: 深度窥探 QuickTest 视图(1)