主頁 > 知識庫 > 知名瀏覽器對DOCTYPE模式的選擇機(jī)制

知名瀏覽器對DOCTYPE模式的選擇機(jī)制

熱門標(biāo)簽:可以集成到系統(tǒng)的外呼 揚(yáng)州市地圖標(biāo)注 中國世界文化遺產(chǎn)地圖標(biāo)注 電話外呼系統(tǒng)怎么找準(zhǔn)客戶 西安公司外呼系統(tǒng)價(jià)格 外呼系統(tǒng)隱私 電腦外呼系統(tǒng)安裝 荊州銷售電銷機(jī)器人 400開頭電話在哪辦理

文檔范圍

本文包括的模式轉(zhuǎn)換(mode switching)適用于Firefox和其他基于Gecko的瀏覽器,Safari、Chrome和其他基于Webkit的瀏覽器,Opera、 Konqueror、Mac版Internet Explorer、Windows版Internet Explorer和內(nèi)嵌IE的瀏覽器。避免提及瀏覽器引擎的名字,取而代之的是使用該引擎最知名瀏覽器的名字。

本文著重介紹模式的選擇機(jī)制,而不是記錄每個(gè)模式的確切行為。

模式

以下是各種不同的模式:

內(nèi)容類型為text/html的模式

text/html內(nèi)容的模式選擇取決于doctype嗅探(doctype sniffing,本文后面有討論)。在IE8中,模式也取決于其他因素。然而在IE8的默認(rèn)情況下,那些不在微軟提供黑名單上的非局域網(wǎng)(non- intranet)站點(diǎn)的模式取決于文檔類型。

再怎么強(qiáng)調(diào)每個(gè)瀏覽器中模式精確行為的不同也是不過分的,即使本文中進(jìn)行了統(tǒng)一的討論。

怪癖模式(Quirks Mode)
怪癖模式中,為了避免“破壞”那些根據(jù)在20世紀(jì)90年代末流行的實(shí)踐創(chuàng)作的頁面,瀏覽器違反了現(xiàn)代的Web格式規(guī)范。不同的瀏覽器實(shí)現(xiàn)了不同的怪癖行為。Internet Explorer6、7和8中,怪癖模式有效地凍結(jié)在IE5.5 。其他瀏覽器中,怪癖模式是對準(zhǔn)標(biāo)準(zhǔn)模式的少量偏移。
如果正在創(chuàng)作新網(wǎng)頁,你應(yīng)該符合相關(guān)的規(guī)范(特別是CSS2.1)且使用標(biāo)準(zhǔn)模式。
標(biāo)準(zhǔn)模式(Standards Mode)
標(biāo)準(zhǔn)模式中,瀏覽器嘗試給符合標(biāo)準(zhǔn)的文檔在規(guī)范上的正確處理達(dá)到在指定瀏覽器中的程度。
不同的瀏覽器遵循不同的階段,所以標(biāo)準(zhǔn)模式也不是一個(gè)單一目標(biāo)。
HTML5把這種模式叫“非怪癖模式(no quirks mode)”
準(zhǔn)標(biāo)準(zhǔn)模式(Almost Standards Mode)
irefox、Safari、Chrome、Opera(從7.5開始)和IE8也有個(gè)叫“準(zhǔn)標(biāo)準(zhǔn)模式”的模式,它按照傳統(tǒng)的做法來實(shí)現(xiàn)表格單元格的垂直尺寸而不是嚴(yán)格的遵照CSS2規(guī)范。Mac IE5、Windows IE6和7、Opera7.5以前版本和Konqueror無需準(zhǔn)標(biāo)準(zhǔn)模式,因?yàn)樗鼈冎辽贈]有在各自的標(biāo)準(zhǔn)模式下嚴(yán)格遵循CSS2規(guī)范來實(shí)現(xiàn)表格單元格垂直尺寸。實(shí)際上,它們的標(biāo)準(zhǔn)模式更接近Mozilla的準(zhǔn)標(biāo)準(zhǔn)模式而不是Mozilla的標(biāo)準(zhǔn)模式。
HTML5把這種模式叫著“受限怪癖模式(limited quirks mode)”。
IE7模式
IE8有個(gè)模式主要是凍結(jié)了IE7標(biāo)準(zhǔn)模式的副本。其他瀏覽器沒有像這樣的模式,且該模式也未被HTML5指定。

內(nèi)容類型為application/xhtml+xml的模式(XML模式)

Firefox、Safari、Chrome和Opera中,application/xhtml+xml HTTP內(nèi)容類型(不是meta元素也不是doctype!)會觸發(fā)XML模式。在XML模式中,瀏覽器嘗試給XML文檔在規(guī)范上的正確處理達(dá)到在制定瀏覽器中的程度。

IE6、7和8不支持application/xhtml+xml,Mac IE5也如此。

基于WebKit的Nokia S60 瀏覽器中,application/xhtml+xml HTTP內(nèi)容類型不能觸發(fā)XML模式,因?yàn)樵谝苿?dòng)的圍墻花園(mobile walled gardens)中關(guān)注點(diǎn)是對不規(guī)范內(nèi)容的兼容性。(舊式的“移動(dòng)瀏覽器”無法使用真正的XML解析器,因?yàn)椴灰?guī)范內(nèi)容已被標(biāo)記為XML。)

由于沒有充分地測試Konqueror,我無法確切說出在這個(gè)瀏覽器中會發(fā)生什么。

非Web模式(Non-Web Modes)

某些引擎擁有的模式與Web內(nèi)容無關(guān)。為了完整性,它們僅僅在這里被提到。Opera有個(gè)WML2.0模式。Leopard上的WebKit有個(gè)用于舊式Dashboard widgets的特定模式。

影響

以下是這些模式的主要影響:

布局

text/html的模式主要是影響CSS布局。例如,表格不繼承樣式是個(gè)怪癖。在某些瀏覽器的怪癖模式下,盒模型(box model)變成IE5.5的盒模型。本文檔沒有列舉出所有的布局怪癖。

準(zhǔn)標(biāo)準(zhǔn)模式(有這種模式的瀏覽器中)中,僅包含圖片的表格單元格的高和標(biāo)準(zhǔn)模式中不同。

XML模式中,選擇器有不同的區(qū)分大小寫行為。此外,用于HTML body元素的特有規(guī)則不能應(yīng)用在那些沒有實(shí)現(xiàn)最新CSS2.1改變的較舊版本的瀏覽器。

解析

也有一些怪癖影響HTML和CSS的解析且會導(dǎo)致符合標(biāo)準(zhǔn)的網(wǎng)頁被錯(cuò)誤解析。怪癖布局決定了這些怪癖是否開啟。無論如何,了解怪癖模式和標(biāo)準(zhǔn)模式在CSS布局和解析(非HTML解析)上的主要異同是非常重要的。

一些人錯(cuò)誤地把標(biāo)準(zhǔn)模式稱為“嚴(yán)格解析模式(strict parsing mode)”,其讓人誤解了瀏覽器強(qiáng)制執(zhí)行HTML語法規(guī)則和用瀏覽器評估標(biāo)記的正確性。情況并非如此。即使當(dāng)標(biāo)準(zhǔn)模式布局生效時(shí),瀏覽器依舊會做標(biāo)簽雜燴湯(tag soup,http://en.wikipedia.org/wiki/Tag_soup)修正工作。(在2000年Netscape6發(fā)布前,Mozilla的確有用于強(qiáng)制執(zhí)行HTML語法規(guī)則的解析模式。這些模式和現(xiàn)有的Web內(nèi)容不兼容而被遺棄。)

另一個(gè)常見的誤解是關(guān)于XHTML解析的。通常認(rèn)為用XHTML doctype得到不同的解析。其實(shí)并非如此,內(nèi)容類型是text/html的XHTML文檔所用解析器和HTML文檔的是同一個(gè)。目前瀏覽器在意的是文檔類型為text/html的XHTML僅是“撒面包丁的標(biāo)簽雜燴湯(tag soup with croutons)”(到處是額外的斜線)。

僅當(dāng)使用XML文檔類型的文檔(例如:application/xhtml+xml或xmapplication/)會觸發(fā)XML模式來解析,這時(shí)的解析器完全不同于HTML解析器。

腳本

雖然怪癖模式主要是關(guān)于CSS的,但也有一些是關(guān)于腳本的。例如,F(xiàn)irefox的怪癖模式中,HTML id 屬性像在IE一樣建立了全局腳本作用域的對象引用。IE8中關(guān)于腳本的影響比其他瀏覽器更值得關(guān)注。

XML模式中,某些DOM API的行為徹底不同,因?yàn)閄ML的DOM API行為被定義時(shí)不兼容HTML的行為。

doctype嗅探(也叫doctype轉(zhuǎn)換)

現(xiàn)代瀏覽器使用doctype嗅探來決定text/html文檔的引擎模式。這意味著模式的選擇是基于HTML文檔開始的文檔類型聲明(或缺少)。(這不適于使用XML文檔類型的文檔。)

文檔類型聲明(doctype)是SGML的語法偽造,SGML是個(gè)舊式的標(biāo)記框架,HTML5之前的HTML就是依據(jù)其定義的。HTML4.01規(guī)范中,文檔類型聲明描述的是HTML的版本信息。盡管名字叫“文檔類型聲明”且HTML 4.01規(guī)范所描述的是關(guān)于“版本信息”,文檔類型聲明并不適用把SGML或XML文檔分類為特定類型的文檔,即使它看起來像是(因?yàn)槊郑#ǜ鄡?nèi)容在附錄中)

HTML4.01規(guī)范和ISO 8879(SGML)都沒有說關(guān)于使用文檔類型聲明作為引擎模式轉(zhuǎn)換的任何事情。doctype嗅探是基于觀察,在doctype嗅探被設(shè)計(jì)時(shí),絕大部分的怪癖文檔既沒有文檔類型聲明也沒有引用舊的DTD。HTML5接受這個(gè)事實(shí),且定義了text/html中doctype作為唯一的模式轉(zhuǎn)換。

典型的預(yù)HTML5(pre-HTML5)文檔類型聲明包含(被空白分開)“<!DOCTYPE”字符串,根元素(“html”)的通用標(biāo)識符, “PUBLIC”字符串,處于引號中的DTD公共標(biāo)識符,同一DTD的可能系統(tǒng)標(biāo)識符(URL)和字符 “>”。文檔類型聲明位于文檔的根元素開始標(biāo)簽之前。

選擇doctype

text/html

下面是創(chuàng)建新的text/html文檔時(shí)如何選擇doctype的簡單指南:

標(biāo)準(zhǔn)模式,最前沿的驗(yàn)證
<!DOCTYPE html>
如果想驗(yàn)證諸如<video>、<canvas>和ARIA這樣的新特性,那么這樣做是對的。注意,HTML5的有效定義依舊在變化中,請確保在Firefox、Safari、Chrome、Opera9或Opera10中測試圖像對齊。在Internet Explorer中測試圖像對齊是不足夠的,無論如何請確保在IE8中也進(jìn)行了測試。
標(biāo)準(zhǔn)模式,更穩(wěn)定的驗(yàn)證目標(biāo)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
這個(gè)doctype也會觸發(fā)標(biāo)準(zhǔn)模式,且10歲大的HTML4.01有效定義是穩(wěn)定的。請確保在Firefox、Safari、Chrome、 Opera9或Opera10中測試圖像對齊。在Internet Explorer中測試圖像對齊是不足夠的,無論如何請確保在IE8中也進(jìn)行了測試。
要使用標(biāo)準(zhǔn)模式,但仍要驗(yàn)證不推薦標(biāo)記或在表格布局中使用切片圖像且不想去修復(fù)它們。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
它會觸發(fā)準(zhǔn)標(biāo)準(zhǔn)模式(和老掉牙的Mozilla中的完全標(biāo)準(zhǔn)模式full Standards mode)。請注意,如果以后移植到HTML5上,基于利用表格實(shí)現(xiàn)的切片圖像的布局可能會被破壞(且完整標(biāo)準(zhǔn)模式也如此)。
故意要使用怪癖模式
沒有doctype。
請別這樣做。故意為怪癖模式所做的設(shè)計(jì)將會困擾你,在將來你的同事或繼任者甚至沒有人關(guān)心Windows IE6(Netscape4.x和IE5已經(jīng)沒有人關(guān)心了)。為怪癖模式設(shè)計(jì)是個(gè)壞主意。相信我。
如果你想依舊支持Windows IE6,對它做一個(gè)特別的hack使用條件注釋比使其他瀏覽器退步到怪癖模式好。

我不推薦任何的XHTML doctype,因?yàn)閄HTML被用作text/html被認(rèn)為是有害的。無論如何,如果你選擇使用XHTML doctype,請注意XML聲明會使IE6(但不是IE7?。┯|發(fā)怪癖模式。

application/xhtml+xml

對application/xhtml+xml的簡單指南是絕不使用doctype。該方式下的網(wǎng)頁不是“嚴(yán)格一致”的XHMTL1.0,但這并不重要。(請看后面的附錄)

IE8 并發(fā)癥

A List Apart 曾介紹 ,IE8除doctype外會使用基于meta元素的模式轉(zhuǎn)換作為模式選擇的因素之一。(請看Ian Hickson、David Baron、David Baron again、Robert O’Callahan 和 Maciej Stachowiak的評論。)

IE8有4種模式:IE5.5怪癖模式、IE7標(biāo)準(zhǔn)模式、IE8 準(zhǔn)標(biāo)準(zhǔn)模式 和IE8標(biāo)準(zhǔn)模式。模式的選擇取決于來自幾個(gè)方面的數(shù)據(jù):doctype、meta元素、HTTP頭、來自微軟的定期下載數(shù)據(jù)、局域網(wǎng)域、用戶所做設(shè)置、局域網(wǎng)管理員所做設(shè)置、父框架的模式(如果有)和地址欄兼容視圖按鈕被用戶觸發(fā)。(對于嵌入該引擎的其他應(yīng)用,模式也取決于嵌入的應(yīng)用。)

幸運(yùn)的是如果出現(xiàn)下列情況,IE8大體上會像其他瀏覽器一樣使用doctype嗅探:

  • 作者沒有設(shè)置X-UA-Compatible HTTP頭
  • 作者沒有設(shè)置X-UA-Compatible meta標(biāo)簽
  • 微軟沒有在黑名單中放置該站點(diǎn)的域名
  • 局域網(wǎng)管理員沒有把該站點(diǎn)放置到黑名單上
  • 用戶沒有按下兼容視圖按鈕(Compatibility View button) (或以其他方式添加到某個(gè)特定的用戶黑名單中)
  • 該站點(diǎn)不在局域網(wǎng)域中
  • 用戶沒有選擇在IE7中顯示所有站點(diǎn)
  • 頁面沒有通過frame嵌入到兼容模式的頁面中

上述除兩個(gè)關(guān)于X-UA-Compatible的情況外,IE8像IE7一樣執(zhí)行doctype嗅探。IE7仿真( IE7 emulation)叫兼容視圖。

在 X-UA-Compatible 情況下,IE8的行為和其他瀏覽器完全不同。想看本頁的附錄或PDF和PNG格式的流程圖。

不幸的是,沒有 X-UA-Compatible的HTTP頭或meta標(biāo)簽,即使使用了合適的doctype,IE8讓用戶無意間使頁面從IE8的標(biāo)準(zhǔn)模式降到IE7模式,這是一種仿真的IE7標(biāo)準(zhǔn)模式。更糟糕的是,局域網(wǎng)管理員也可以這么做。微軟也可以把你所用的所有域名到列入黑名單。

為了對付這些影響,doctype是不夠的,你需要X-UA-Compatible HTTP頭和meta標(biāo)簽。

下面的簡單指南是針對已經(jīng)有doctype在其他瀏覽器觸發(fā)標(biāo)準(zhǔn)模式或者準(zhǔn)標(biāo)準(zhǔn)模式的新的text/html文檔如何選擇X-UA-Compatible HTTP頭或meta標(biāo)簽的:

你的域名沒有在微軟的黑名單上,你更關(guān)注是沒有瀏覽器專屬的令人討厭的東西而不是確保用戶無法回退去呈現(xiàn)IE7的行為。
你不需要包括X-UA-Compatible HTTP頭或meta標(biāo)簽。
你的域名在微軟的黑名單中,由于你域名中的其他作者破壞了站點(diǎn)或許導(dǎo)致用戶對整個(gè)域啟用了兼容視圖,你擔(dān)心Google或Digg用frame嵌入你的站點(diǎn)或你想確保用戶無法使用兼容視圖
首先,在你的頁面包含后面的meta元素(它在HTML5中是非法的) <meta http-equiv="X-UA-Compatible" content="IE=Edge"> (在任何腳本元素前),或者設(shè)置后面的HTTP頭:X-UA-Compatible: IE=Edge
你的站點(diǎn)在IE7中工作但在IE8中破壞
首先,在你的頁面包含后面的meta元素(它在HTML5中是非法的) (在任何腳本元素前),或者設(shè)置后面的HTTP頭: X-UA-Compatible: IE=EmulateIE7,然后修復(fù)你的站點(diǎn)不依賴非標(biāo)準(zhǔn)的IE7行為和遷移到IE=Edge。

相關(guān)鏈接

  • Eric Meyer在使用正確doctype中寫的關(guān)于Mac IE5的模式
  • Mozilla的doctype嗅探 by David Baron
  • Lance Silver在IE6中的CSS增強(qiáng)中討論了在Windows IE6中的模式和doctype嗅探
  • Opera9的doctype轉(zhuǎn)換
  • Faruk Ateş的IE8和X-UA-Compatible解決方案

補(bǔ)遺:對XML的實(shí)現(xiàn)者和規(guī)范作者的懇求

請不要把doctype嗅探帶到XML。

doctype嗅探是用簽雜燴湯似的方法解決一個(gè)標(biāo)簽雜燴湯問題。doctype嗅探是在HTML4和CSS2規(guī)范發(fā)布后設(shè)計(jì)的一種試探方法,它從文檔中區(qū)分出過時(shí)文檔以符合其作者可能期望的行為。

偶爾有人建議在XML上使用doctype嗅探來調(diào)度不同的處理、識別正在使用的詞匯表或激活特性。這是個(gè)壞主意。調(diào)度和詞匯表識別應(yīng)該是基于名字空間的,而特性激活應(yīng)該是基于明確的處理指令或元素。

良構(gòu)(well-formedness)的整個(gè)思想是介紹允許XML的無DTD解析,且推廣無doctype文檔。在正式情況下,兩個(gè)XML文檔有相同的規(guī)范形式且應(yīng)用不同地處理它們(且不同之處并非因?yàn)闆]有選擇處理外部實(shí)體),這個(gè)應(yīng)用或許被破壞了。在實(shí)踐情況下,如果兩個(gè)XML文檔導(dǎo)致同樣的內(nèi)容被報(bào)告(qnames忽略)給SAX2內(nèi)容處理器且應(yīng)用不同地處理文檔,這個(gè)應(yīng)用或者被破壞了??紤]到作為 Web作者無法相信每個(gè)人都會使用解決額外實(shí)體的XMLprocessor來解析其頁面(即使一些瀏覽器看起來這樣做,因?yàn)樗鼈儠成湟欢ü驳臉?biāo)識符到一個(gè)有刪節(jié)的定義實(shí)體的DTD),插入doctype到XML中用于Web是毫無意義的且通常會導(dǎo)致貨運(yùn)崇拜(cargo cultish)習(xí)慣。(您仍然使用W3C驗(yàn)證器的DTD覆蓋功能來對一個(gè)DTD進(jìn)行驗(yàn)證,雖然W3C驗(yàn)證器會說結(jié)果僅僅是暫時(shí)有效?;蚋玫氖牵憧梢杂梅艑扤G驗(yàn)證,它不會污染模式引用的文檔。)為了嗅探而要求doctype是非常愚蠢的,即使那是在HTML實(shí)踐中的解決方法。

此外,當(dāng)?shù)图墑e的規(guī)范定義兩個(gè)相等的東西時(shí),高級別的規(guī)范不應(yīng)該嘗試給它們不同的含義。請考慮<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。如果刪除公共標(biāo)識符,依舊指定了同樣的DTD,因此doctype <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">表示和前面的doctype一樣。應(yīng)該不同地嗅探它們么?可以進(jìn)一步理論。假設(shè)復(fù)制給example.com一個(gè)叫foobar.dtd的DTD:<!DOCTYPE html SYSTEM "http://example.com/foobar.dtd">。這該如何嗅探?應(yīng)該是同一個(gè)意思。甚至整個(gè)DTD可以貼在文檔中。

換句話說,如果有#include “foo.h”,你不應(yīng)該給名字foo.h綁定任何black magic,因?yàn)樗鼞?yīng)該允許復(fù)制foo.h的內(nèi)容到文檔中或復(fù)制foo.h到bar.h中且表示#include “bar.h”。

我不擔(dān)心HTML和SGML構(gòu)造相同的參數(shù)的原因是Web瀏覽器不會使用真正的SGML解析器去解析HTML,所以我認(rèn)為偽裝成SGML進(jìn)行處理是沒有用的。無論如何,如果你還不相信,請看W. Eliot Kimber關(guān)于此事的文章 comp.text.sgml

附錄:text/html中一些doctype的處理方式

下表中,怪癖模式、標(biāo)準(zhǔn)模式和準(zhǔn)標(biāo)準(zhǔn)分別表示為Q、S和A。當(dāng)瀏覽器僅有兩種模式時(shí),如果表格單元格的行高和Mozilla的標(biāo)準(zhǔn)模式表現(xiàn)一致時(shí),標(biāo)準(zhǔn)模式標(biāo)記為“S”,如果表格單元格的行高和Mozilla的準(zhǔn)標(biāo)準(zhǔn)模式表現(xiàn)一致時(shí),則標(biāo)記為“A”。

請注意使用XML內(nèi)容模型提供服務(wù)的XHTML在XML模式下渲染。

本表的目的并不是說表中所有的doctype都是新建頁面的合理選擇。本表的目的是為了展示我的推薦是依據(jù)什么樣的數(shù)據(jù)。

下列的簡寫符號是用于列標(biāo)題:

NS6
Mozilla 0.6…0.9.4 和 Netscape 6.0…6.2.3
Old Moz
Mozilla 0.9.5 到 1.1 alpha 和 Mozilla 1.0
Moz & Safari & Opera 10 & HTML5
Mozilla 1.0.1, Mozilla 1.1 beta和更高版本, Firefox 到 Netscape 7, Safari 0.9 到 Safari 4.0 beta, Opera 10, Chrome, Konqueror 3.5, HTML5指定的行為
Opera 9.0
Opera 9.0…9.20
IE 8 & Opera 9.5
無 X-UA-Compatible和兼容模式覆蓋的默認(rèn)IE8(該情況下“A”意味著IE8準(zhǔn)標(biāo)準(zhǔn)模式)、 Opera 7.5…8.54 和 9.5…9.6
IE 7 & Opera 7.10
IE7、兼容模式且無X-UA-Compatible覆蓋的IE8(這種情況下“A”意味IE7模式)和Opera 7.10…7.23
IE 6 & Opera 7.0
Windows IE 6 和 Opera 7.0…7.03
Mac IE 5
Mac IE 5.0…5.2.3
Konq 3.2
Konqueror 3.2.2…3.3 (也可能包括 3.1…3.2.1; 我尚未確定)
Doctype NS6 Old Moz Moz & Safari & Opera10 & HTML5 Opera9.0 IE8 & Opera9.5 IE7 & Opera7.10 IE6 & Opera7.0 Mac IE5 Konq3.2
None Q Q Q Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
Q Q Q Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
S S S S S A A A A
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
S S S S S A A Q A
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/html4/strict.dtd">
S S S S S A A A A
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
S S S S S A A A A
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Q Q Q Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Q Q Q Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
S S A A A A A A Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

 

Q S A A A A A A Q
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Q Q Q Q A A A A Q
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> S S S S S A A A A
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> S S S S S A A A A
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
S S S S S A A A A
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
S S A A A A A A Q
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> S S S S S A Q A Q
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> S S S S S A Q A Q
<?xml
version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
S S S S S A Q A Q
<?xml
version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

S S A A A A Q A Q
<!DOCTYPE
HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
Q S S Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup
Language//EN">
Q S S S S A A A Q
<!DOCTYPE
HTML PUBLIC "ISO/IEC 15445:1999//DTD HTML//EN">
S S S Q Q Q Q Q Q
<!DOCTYPE
HTML PUBLIC "ISO/IEC 15445:1999//DTD HyperText Markup
Language//EN">
S S S S S A A A Q
<!DOCTYPE html> Q S S S S A A A  

歷史記錄

Moziila的doctype嗅探代碼在2000年10月、2001年9月和2002年6月有大幅度的修改。本文檔描述的Mozilla(和 Netscape 6.x)建立的狀態(tài)可以自2000.10.19起在ftp.mozilla.org上看到。本文檔未涉及Mozilla M18(和Netscape 6.0 PR3)中的doctype嗅探的工作方式。Safari的doctype嗅探代碼自第一個(gè)公開的測試版起也有大幅度的修改。本文檔不包括比版本V73也叫0.9更早的行為。

Konqueror3.5之前的doctype嗅探代碼似乎來自于Safari的很早的一個(gè)版本。Konqueror現(xiàn)在和Safari匹配,其doctype嗅探代碼來自Mozilla。

從表中可見,Opera的doctype嗅探正由規(guī)律的從類似IE向類似Mozilla轉(zhuǎn)變,雖然Opera9.5和9.6在倒退的路上。同時(shí),Opera怪癖模式的布局行為已從仿效IE6的怪癖模式轉(zhuǎn)換到Mozilla的怪癖模式。

附錄:IE8的模式選擇

開始:進(jìn)入“X-UA-Compatible meta?”
X-UA-Compatible meta?
IE=7:使用IE7標(biāo)準(zhǔn)
IE=EmulateIE7: 進(jìn)入“怪癖或無doctype?(兼容模式)”
IE=IE8 或 IE=IE7 或 IE=a 或 IE=EmulateIE8 或沒有或首先出現(xiàn) script:進(jìn)入”X-UA-Compatible HTTP頭?”
IE=8 或 IE=Edge 或 IE=99 或 IE=9.9:進(jìn)入“準(zhǔn)標(biāo)準(zhǔn)模式?”
IE=5:使用怪癖模式(IE5.5)
X-UA-Compatible HTTP頭?
IE=7:使用IE7標(biāo)準(zhǔn)模式
IE=EmulateIE7:進(jìn)入“怪癖或無doctype?(兼容模式)”
IE=IE8 或 IE=IE7 或 IE=a 或 IE=EmulateIE8 或沒有:進(jìn)入“顯示所有站點(diǎn)…預(yù)設(shè)置?”
IE=8 或 IE=Edge 或 IE=99 或 IE=9.9:進(jìn)入“準(zhǔn)標(biāo)準(zhǔn)模式?”
IE=5:使用怪癖模式(IE5.5)
怪癖模式或無doctype?(兼容模式)
是:使用怪癖模式(IE5.5)
否:使用IE7標(biāo)準(zhǔn)模式
顯示所有站點(diǎn)…預(yù)設(shè)置?
是:進(jìn)入“怪癖模式或無doctype?(兼容模式)”
否:進(jìn)入“顯示局域網(wǎng)站點(diǎn)…預(yù)設(shè)置?”
顯示局域網(wǎng)站點(diǎn)…預(yù)設(shè)置?
是:進(jìn)入“站點(diǎn)位于局域網(wǎng)域?”
否:進(jìn)入“域名在微軟維護(hù)的名單上?”
域名在微軟維護(hù)的名單上?
是:進(jìn)入“怪癖模式或無doctype?(兼容模式)”
否:進(jìn)入“被兼容模式頁面用Frame嵌入?”
被兼容模式頁面用Frame嵌入?
是:進(jìn)入“怪癖模式或無doctype?(兼容模式)”
否:進(jìn)入“按下了兼容模式按鈕?”
按下了兼容模式按鈕?
是:進(jìn)入“怪癖模式或無doctype?(兼容模式)”
否:進(jìn)入“怪癖模式或無doctype?(IE8)”
怪癖模式或無doctype?(IE8)
是:進(jìn)入“使用怪癖模式(IE5.5)”
否:進(jìn)入“準(zhǔn)標(biāo)準(zhǔn)模式?”
準(zhǔn)標(biāo)準(zhǔn)模式?
是:使用IE8準(zhǔn)標(biāo)準(zhǔn)模式
否:使用IE8標(biāo)準(zhǔn)模式

這些步驟都可以通過PDF和PNG格式的流程圖看到。

鳴謝

感謝Simon Pieters、Simon Pieters和Anne van Kesteren幫助我改正了各種Opera版本的模式表和他們的評論。感謝Simon Pieters制作了另一份IE8的流程圖。

標(biāo)簽:樂山 延安 白銀 錫林郭勒盟 阿拉善盟 四川 濟(jì)南 貴陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《知名瀏覽器對DOCTYPE模式的選擇機(jī)制》,本文關(guān)鍵詞  知名,瀏覽器,對,DOCTYPE,模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《知名瀏覽器對DOCTYPE模式的選擇機(jī)制》相關(guān)的同類信息!
  • 本頁收集關(guān)于知名瀏覽器對DOCTYPE模式的選擇機(jī)制的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章