1. 程式人生 > >使用Doctype啟用瀏覽器模式

使用Doctype啟用瀏覽器模式

使用Doctype啟用瀏覽器模式

為了處理根據Web標準編寫的內容和根據20世紀90年代末流行的傳統實踐編寫的內容,今天的Web瀏覽器實現了各種引擎模式。本文件解釋了這些模式是什麼以及它們是如何被觸發的。

不耐煩的總結

簡而言之:從本文中得出的主要結論是,您應該首先將所有HTML文件(即任何被提供的文件text/html<!DOCTYPE html>作為原始碼中的第一件事啟動。(繼續閱讀以瞭解原因。)

如果你要格外小心,以確保IE8,IE9或IE10的使用者不能按一個按鈕,使您的網站的倒退,如果它是在IE7被檢視,無論是配置您的伺服器傳送HTTP標頭X-UA-Compatible: IE=Edge

text/html或將<meta http-equiv="X-UA-Compatible" content="IE=Edge">head您的HTML文件(在任何指令碼之前)。但是,這會使HTML文件無效,如果不包含這些特定於IE的咒語,IE的預設行為在大多數情況下都是合理的,因此您不需要跳過這些特定於IE的箍。(繼續閱讀例外情況。)

本文件的範圍

本文件介紹模式切換,因為它適用於Firefox和其他基於Gecko的瀏覽器,Safari,Chrome和其他基於WebKit的瀏覽器,Opera,Konqueror,適用於Mac的Internet Explorer,適用於Windows的Internet Explorer(包括Windows Phone)以及嵌入IE的瀏覽器。而不是引用

瀏覽器引擎的名稱,而是使用使用每個引擎的最知名瀏覽器的名稱。

本文件重點介紹模式選擇機制,並未記錄每種模式的確切行為。本文件的目的是為您提供有關如何避免傳統模式的資訊。本文件的目的不是通過故意選擇傳統模式來促進採摘行為。

模式

以下是各種模式:

text/html內容的常見模式

text/html內容模式的選擇取決於doctype嗅探(在本文件後面討論)。在IE8及更高版本中,該模式還取決於其他因素。但是,預設情況下,即使在IE8及更高版本中,模式也取決於不在Microsoft提供的黑名單中的非Intranet站點的doctype。此外,如果安裝了Google Chrome Frame,即使使用IE6和IE7也會涉及其他因素。

怪癖模式

在Quirks模式中,瀏覽器違反當代Web格式規範,以避免根據20世紀90年代末普遍存在的做法“打破”建立的頁面。以前,不同的瀏覽器實現了不同的怪癖。特別是在Internet Explorer 6,7,8和9中,Quirks模式在IE 5.5中被有效凍結,而在其他瀏覽器中,Quirks模式與Almost Standards模式有一些偏差。最近,瀏覽器已經在他們的Quirks模式中融合了常見的行為。最值得注意的是,IE10的主要Quirks模式不再是IE 5.5的模仿,而是尋求與其他瀏覽器的Quirks模式互操作。WHATWG 正在可互操作的怪癖進行標準化

IE10的主要Quirks模式就像其他瀏覽器的Quirks模式有時被稱為“可互操作的Quirks模式”,以區別於IE10模仿IE10所具有的IE 5.5模式。

如果您正在創作新頁面,請不要使用Quirks模式。只是不要。使用標準模式。

標準模式

在標準模式下,瀏覽器嘗試在特定瀏覽器中實現的範圍內為文件提供規範方面的正確處理。

由於不同的瀏覽器處於不同的合規階段,因此標準模式也不是單一目標。

HTML規範要求這種模式下,“無怪癖模式”。

幾乎標準模式

Firefox,Safari,Chrome,Opera(自7.5),IE8,IE9和IE10也有一種稱為“幾乎標準模式”的模式,它傳統上實現表格單元的垂直大小,而不是根據CSS2規範。Mac IE 5,Windows IE 6和7,7.5之前的Opera和Konqueror不需要Almost Standards模式,因為他們無論如何都沒有根據各自標準模式中的CSS2規範實現表格單元的垂直大小。事實上,他們的標準模式更接近於標準模式,而不是新瀏覽器的標準模式。

回想起來,如果沒有標準和幾乎標準之間的區別,將Almost Standards行為作為預設值並具有CSS屬性來選擇標準模式中的預設行為,那麼Web本來會更好。不過,您應該使用標準模式 - 而不是標準模式。

HTML規範要求這種模式下,“有限怪癖模式”。

對於該模式的application/xhtml+xml內容(XML模式)

在Firefox,Safari瀏覽器,Chrome瀏覽器,Opera和IE9的application/xhtml+xmlHTTP Content-Type不是一個meta元素也不是!DOCTYPE)會觸發XML模式。在XML模式中,這些瀏覽器為特定瀏覽器中實現的XML文件提供了規範方面的正確處理。

IE 6,7和8不支援application/xhtml+xml。Mac IE 5也沒有。

在基於WebKit的諾基亞S60瀏覽器中,由於擔心與移動圍牆花園中的不良內容相容,application/xhtml+xmlHTTP Content-Type不會觸發XML模式。(傳統的“移動瀏覽器”沒有使用真正的XML解析器,因此,格式錯誤的內容已被標記為XML。)

我還沒有測試過Symbian 3上的預設瀏覽器。

我還沒有充分測試Konqueror來說明瀏覽器到底發生了什麼。

Microsoft的IE特定附加模式

以下是HTML5未指定的其他IE特定模式以及其他瀏覽器沒有的模式。它們的啟用涉及配置或X-UA-Compatible作為HTTP頭或meta元素(下面討論)。

Internet Explorer 5怪癖

除了可互操作的Quirks模式之外,IE10還有一個名為“Internet Explorer 5 Quirks”的模式,它模仿IE 5.5,並且是IE6,IE7,IE8和IE9中稱為Quirks模式的模式。

Internet Explorer 7標準

IE8,IE9和IE10都有一種模仿IE7中標準模式的模式。

Internet Explorer 8標準

IE9和IE10有一種模仿IE8中標準模式的模式。

Internet Explorer 8幾乎標準

IE9和IE10有一種模仿IE8中Almost Standards模式的模式。在開發人員工具使用者介面中,此模式與“Internet Explorer 8標準”不同。

Internet Explorer 9標準

IE10有一種模仿IE9中標準模式的模式。

Internet Explorer 9幾乎標準

IE10有一種模仿IE9中幾乎標準模式的模式。在開發人員工具使用者介面中,此模式與“Internet Explorer 9標準”不同。

Internet Explorer 9 XML

IE10有一種模仿IE9中XML模式的模式。在開發人員工具使用者介面中,此模式與“Internet Explorer 9標準”不同。

值得注意的是,以前版本的IE的模仿並不完美。我自己遇到的隨機例子包括IE7標準模擬在後來的IE版本處理@font-face-liked EOT字型不同和IE10模式的IE10支援CSS 2D轉換沒有-ms-真正的IE9需要字首。如果您遵循本文件中給出的建議,您將不會瞄準這些模式,因此模仿的不完美對您來說無關緊要。但是,測試的好處是,在執行在一堆虛擬機器中的IE的實際舊版本中測試您的站點會比使用開發人員工具更新的IE版本更好,以使新版本模擬舊版本進行測試。

用於Windows Phone 8的IE10也具有所有這些模式 - 就像桌面上的IE10一樣。

來自Google的IE特定附加模式

以下是安裝了Google Chrome Frame時,IE6,IE7,IE8和IE9中的其他模式(但在Windows 8或Windows 7上的IE7中不適用)。

Chrome Quirks

此模式與Google Chrome中的Quirks模式相同。

Chrome標準

此模式與Google Chrome中的標準模式相同。

Chrome幾乎標準

此模式與Google Chrome中的“近乎標準”模式相同。

非Web模式

某些引擎具有與Web內容無關的模式。這些模式僅在此處提及以確保完整性。Opera具有WML 2.0模式。Mac OS X 10.5上的WebKit有一個特殊的傳統Dashboard小部件模式(也許這種模式保留在較新的版本中 - 我還沒有調查過)。WebKit也有針對在Mac OS X上嵌入WebKit的應用程式的攻擊。

效果

以下是這些模式的主要效果:

佈局

除了在IE瀏覽器,在模式text/html主要影響CSS佈局和風格體系。例如,不將樣式繼承到表中是一種怪癖。在舊版本的IE和Opera中,盒子模型在Quirks模式下更改為IE 5.5盒子模型。本文件沒有列舉所有佈局怪癖。有關列表,請參閱Mozilla的文件Quirks模式規範

在“幾乎標準”模式中(在具有一個和所有當前標準的瀏覽器中),與標準模式相比,僅包含影象的表格單元格的高度計算方式不同。

在XML模式中,選擇器具有不同的區分大小寫行為。此外,HTML body元素的特殊規則不適用於未實現CSS規範的最新調整的舊版瀏覽器。

解析

還有一些怪癖會影響HTML和CSS解析,並會導致符合要求的頁面被錯誤分析。這些怪癖以古怪的佈局開啟和關閉。但是,重要的是要意識到Quirks模式與標準模式主要是關於CSS佈局和CSS解析 - 而不是HTML解析。在具有符合HTML5的HTML解析器的瀏覽器中,只有一個HTML解析怪癖

有些人誤導性地將標準模式稱為“嚴格解析模式”,這被誤解為暗示瀏覽器強制執行HTML語法規則並且瀏覽器可用於評估標記的正確性。這是不是這種情況。即使標準模式佈局生效,瀏覽器也會標記湯修復。(在Netscape 6釋出之前的2000年夏天,Gecko實際上擁有強制執行HTML語法規則的解析器模式,其中一種模式被稱為“嚴格的DTD”。這些模式與現有Web內容不相容並被放棄。)

另一個常見的誤解與XHTML解析有關。通常認為使用XHTML doctype獲得不同的解析。它不是。服務的XHTML文件text/html使用 HTML 相同的解析器進行解析。就瀏覽器而言,XHTML text/html就像“帶麵包丁的湯”(這裡和那裡有一個額外的斜線)。只有使用XML內容型別(例如application/xhtml+xmlapplication/xml)提供的文件才會觸發XML模式進行解析,在這種情況下,解析器與HTML解析器完全不同。

指令碼

雖然Quirks模式主要是關於CSS,但也有一些指令碼怪癖。在Firefox 14之前,HTML id屬性未在標準和幾乎標準模式中建立來自全域性指令碼範圍的物件引用。在Firefox中,document.all部分可用於Quirks模式,但不能用於其他模式。當進入模擬舊版IE的模式時,IE中對指令碼的影響更為顯著。

在XML模式下,某些DOM API的行為不同,因為XML的DOM API行為被定義為與HTML行為不相容。事後來看,這是非常不幸的。

Doctype Sniffing(又名Doctype切換)

瀏覽器使用doctype嗅探來決定text/html文件的引擎模式。這意味著基於HTML文件開頭的文件型別宣告(或缺少它)來挑選模式。(這不適用於使用XML內容型別提供的文件。)

文件型別宣告(doctype)是SGML的語法工件 - 一種遺留標記框架,HTML5之前的HTML據稱是根據其定義的。在HTML 4.01規範中,文件型別宣告被稱為傳遞HTML 版本資訊。儘管名稱為“文件型別宣告”,儘管HTML 4.01規範說明了“版本資訊”,但文件型別宣告不是將SGML或XML文件分類為特定型別文件的適當方法,即使它看起來像是假設的是(因此得名)。(附錄中有更多內容。)

HTML 4.01規範和ISO 8879(SGML)都沒有說明使用文件型別宣告作為引擎模式切換。Doctype嗅探是基於以下觀察結果:當時設計了doctype嗅探,絕大多數古怪的文件要麼沒有文件型別宣告,要麼引用了舊的DTD。HTML5承認這一現實,並將doctype定義text/html為僅作為模式切換。

典型預HTML5文件型別宣告包含(由空格分隔)字串“ <!DOCTYPE”,根元素的通用識別符號(“ html”),字串“ PUBLIC”,一個DTD的在引號中的公共識別符號,可能是系統識別符號(URL)相同的DTD和字元“ >”。HTML5將doctype簡化為“ <!DOCTYPE html>”。文件型別宣告放在根元素的開始標記之前的文件中。

選擇Doctype

text/html

簡而言之:以下是為新text/html文件選擇文件型別的簡單指南:

標準模式,前沿驗證

<!DOCTYPE html>

這是你應該使用的。有了這個文件型別,可以驗證新功能,比如<video><canvas>和ARIA。請務必在最新版本的頂級瀏覽器中測試您的頁面。

標準模式,遺留驗證目標

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

此文件型別還會觸發標準模式,但如果您的組織具有需要定位舊版驗證的愚蠢政策,您可以堅持使用不太瞭解新功能的不太精確的舊版驗證。但是你真的應該使用<!DOCTYPE html>並修改你組織的政策。

您想使用標準模式,但在表格佈局中使用切片影象並且不想修復它們

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

這為您提供了幾乎標準模式。請注意,如果您稍後轉移到HTML5(因此,完整的標準模式),基於表格中切片影象的佈局可能會中斷,因此最好立即使您的設計與標準模式相容。

你真的想要Quirks模式

沒有doctype。

請不要這樣做。故意為Quirks模式進行設計將會困擾您,您的同事或未來的繼任者。

如果您對舊IE版本之間的差異感到沮喪,並且仍然需要根據客戶端要求支援它們,那麼最好使用條件註釋對舊版本應用特定的黑客,而不是在Quirks模式下尋求通用性。

我不推薦任何XHTML文件型別,因為服務XHTML text/html被認為是有害的。如果您仍然選擇使用XHTML doctype,請注意XML宣告使IE 6(但不是IE 7!)觸發Quirks模式。

application/xhtml+xml

對於簡單的指引application/xhtml+xml使用DOCTYPE 在所有。這樣頁面就不能“嚴格符合”XHTML 1.0,但這並不重要。(請參閱下面的附錄。)

IE8,IE9和IE10併發症

在列表除了宣佈該IE8將採用meta基於元素的模式切換,除了DOCTYPE是在模式選擇的因素。(見Ian HicksonDavid BaronDavid BaronRobert O'CallahanMaciej Stachowiak的評論。)

IE8有四種模式:IE 5.5 quirks模式,IE 7標準模式,IE 8幾乎標準模式和IE 8標準模式。IE9有七種模式:IE 5.5 quirks模式,IE 7標準模式,IE 8幾乎標準模式,IE 8標準模式,IE 9幾乎標準模式,IE 9標準模式和IE 9 XML模式。IE10有11種模式:IE 5.5 quirks模式,IE 7標準模式,IE 8幾乎標準模式,IE 8標準模式,IE 9幾乎標準模式,IE 9標準模式,IE 9 XML模式,IE 10怪癖模式,IE 10差不多標準模式,IE 10標準模式和IE 10 XML模式。模式的選擇取決於各種來源的資料:doctype,ameta元素,HTTP標頭,定期從Microsoft下載的資料,Intranet區域,使用者進行的設定,Intranet管理員進行的設定,幀父級的模式(如果有)以及使用者可以切換的UI按鈕。(對於嵌入引擎的其他應用程式,該模式還取決於嵌入應用程式。)

幸運的是IE8和IE9大致像其他瀏覽器一樣使用doctype嗅探,IE10使用doctype嗅探與其他瀏覽器完全一樣,如果以下所有要點都是真的:

  • X-UA-Compatible作者沒有設定HTTP標頭。
  • X-UA-Compatible meta作者沒有設定標籤。
  • Microsoft尚未將該站點的域名置於黑名單中
  • 內部網管理員尚未將該網站置於黑名單中。
  • 使用者未按下“相容性檢視”按鈕(或以其他方式將域新增到使用者特定的黑名單)。(Metro IE10沒有此UI,但桌面IE10中的UI也會影響Metro模式下的行為。)
  • 該站點不在Intranet區域中。
  • 使用者未選擇在IE7中顯示所有站點。
  • 該頁面不是由相容模式頁面構成的。

對於除兩種X-UA-Compatible情況之外的其他點,IE8和IE9執行像IE7一樣的doctype嗅探。IE7模擬稱為相容性檢視。

在這種X-UA-Compatible情況下,IE8和IE9的行為與其他瀏覽器完全不同。有關IE8的行為,請參閱本頁的附錄PDFPNG格式的流程圖。(與其他瀏覽器的圖表對比為PDF。)還有一個IE 5.5到9(可能帶有Chrome Frame)模式的統一圖表PDF格式。(我打算稍後再製作一張IE9檢視。)

遺憾的是,如果沒有X-UA-CompatibleHTTP標頭或meta標籤,即使您使用了正確的doctype,IE8和IE9也會讓使用者意外地將您的頁面從最標準模式下降到模擬IE7標準模式的IE7模式。更糟糕的是,內部網管理員可能會這樣做。此外,Microsoft可能已將您使用的整個域列入黑名單(例如mit.edu!)。

要抵消這些影響,doctype是不夠的,您需要X-UA-CompatibleHTTP標頭或meta標記。

簡而言之:以下是為新文件選擇X-UA-CompatibleHTTP標頭或meta標記的簡單指南,該 text/html文件已經具有在其他瀏覽器中觸發標準模式或幾乎標準模式的doctype

您的域名不在Microsoft的黑名單中,您更關心的是不必擁有特定於瀏覽器的內容,而不是確保使用者無法將呈現迴歸到IE7行為

您不需要包含X-UA-CompatibleHTTP標頭或meta標記。

您的域名在Microsoft的黑名單中,您的域名(如iki.fi!)有其他作者,其破壞的網站可能會誘使使用者啟用整個域的相容性檢視,您擔心Google或Digg構建您的網站或者您想要確保使用者無法啟用相容性檢視

meta在頁面上<meta http-equiv="X-UA-Compatible" content="IE=Edge">(在任何script元素之前!)包含以下元素(在HTML5中無效)或在頁面上設定以下HTTP標頭:X-UA-Compatible: IE=Edge

您的網站在IE7中工作但在IE8或IE9中斷

首先,meta在頁面上包含以下元素(在HTML5中無效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">(在任何script元素之前!)或在頁面上設定以下HTTP標頭:X-UA-Compatible: IE=EmulateIE7

然後修復您的網站,不要依賴非標準的IE7行為並遷移到IE=Edge

您的網站在IE8中工作但在IE9中斷

首先,meta在頁面上包含以下元素(在HTML5中無效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">(在任何script元素之前!)或在頁面上設定以下HTTP標頭:X-UA-Compatible: IE=EmulateIE8

然後修復您的網站,不要依賴非標準的IE8行為並遷移到IE=Edge

您的網站在IE9中工作但在IE10中中斷

首先,meta在頁面上包含以下元素(在HTML5中無效)<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">(在任何script元素之前!)或在頁面上設定以下HTTP標頭:X-UA-Compatible: IE=EmulateIE9

然後修復您的網站,不要依賴非標準的IE8行為並遷移到IE=Edge

谷歌Chrome框架併發症

谷歌Chrome Frame是IE 6,7,8和9的瀏覽器擴充套件和瀏覽器外掛的組合,它使用IE使用的網路堆疊將谷歌瀏覽器的引擎新增到IE的使用者介面外殼中。安裝後,IE預設情況下執行正常。但是,網頁可以選擇使用X-UA-CompatibleHTTP標頭或元標記呼叫Chrome引擎而不是IE引擎。

指定chrome=1X-UA-Compatible是否已安裝Chrome Frame的呼叫Chrome Frame的IE瀏覽器中的任何支援的版本。指定chrome=IE6僅在IE6中啟用Chrome Frame,指定chrome=IE7僅在IE7和IE6中chrome=IE8啟用Chrome Frame ,並僅在IE8及更低版本中啟用Chrome Frame。

啟用Chrome Frame的指令可以與用於控制IE引擎的指令(如果沒有安裝Chrome Frame)通過用逗號或分號分隔來組合:<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8">

在為頁面啟用Chrome框架後,Chrome的四種模式(標準,幾乎標準,怪異和XML)中的一種選擇與普通Chrome一樣。

使用Chrome Frame有幾個重要原因:

  • Chrome Frame缺乏IE的輔助功能支援。啟用Chrome框架後,IE中的內容區域將成為可訪問性黑洞。也就是說,螢幕閱讀器和Windows語音識別功能不適用於Chrome Frame。
  • 讓您的網站告訴使用者他們應該安裝Chrome Frame,這會使網站的安全反模式告訴使用者他們應該讓某人在他們的計算機上安裝特權本機程式碼外掛才能使用網站。

附錄:對使用XML的實現者和規範編寫者的辯護

請不要將doctype嗅探帶到XML。

Doctype嗅探是標籤湯問題的標籤湯解決方案。 在HTML 4和CSS2規範被編寫為一種啟發式 方法來區分遺留文件與作者可能期望符合行為的文件之後,設計了Doctype嗅探。

有時建議在XML端使用doctype嗅探以及排程到不同的處理程式,識別正在使用的詞彙表或啟用功能。這是一個壞主意。排程和詞彙識別應基於名稱空間,並且功能啟用應基於顯式處理指令或元素。

引入良好構造的整個概念以允許DTDless解析XML,並且通過擴充套件,允許無文件文件。在正式的術語中,如果兩個XML文件具有相同的規範形式,並且應用程式以不同方式對待它們(並且差異不是由於選擇不處理外部實體),則應用程式可能會被破壞。實際上,如果兩個XML文件導致向SAX2報告相同的內容(qnames被忽略)ContentHandler 並且應用程式以不同的方式處理文件,應用程式可能會被破壞。考慮到作為Web作者,您不能相信每個解析您的頁面的人都使用解析外部實體的XML處理器(即使某些瀏覽器似乎這樣做是因為他們將某些公共ID對映到實體定義的簡化DTD),請插入doctype用於Web的XML通常是毫無意義的,通常是出於貨物養成習慣。(您仍然可以使用W3C驗證器的DTD覆蓋功能驗證DTD,儘管W3C驗證器會說結果只是暫時有效。或者更好的是,您可以使用RELAX NG驗證,它不會使用模式引用汙染文件。)只需要嗅探文件型別就很愚蠢,即使這是HTML實際情況。

而且,當較低級別的規範定義了兩個等價的東西時,更高級別的規範不應該試圖給這兩個東西賦予不同的含義。考慮<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。如果刪除了公共識別符號,則仍然指定相同的DTD,因此,doctype <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 與先前的doctype相同。他們應該被嗤之以鼻嗎?這個想法可以進一步發展。假設DTD被複制到example.com並命名為foobar.dtd : <!DOCTYPE html SYSTEM "http://example.com/foobar.dtd">. 那怎麼可能被嗅到?意思是一樣的。整個DTD甚至可以內嵌貼上!

換一種方式,如果你有#include "foo.h",你不應該任何魔法繫結的名稱foo.h,因為它應該是允許貼上的內容foo.h 線上或複製的內容foo.h ,以bar.h 和說#include "bar.h"

我不打算用HTML和SGML製作相同的引數的原因是Web瀏覽器不使用真正的SGML解析器來解析HTML,所以我認為假裝正在處理SGML並不是很有用。但是,如果您還不確定,請參閱W. Eliot Kimber關於此事的comp.text.sgml帖子

附錄:中國某些文件的處理 text/html

在下表中,Quirks模式,標準模式和幾乎標準模式分別由Q,S和A表示。當瀏覽器只有兩種模式時,標準模式標記為“S”,如果表格單元格中的行高如Mozilla的標準模式,則為“A”,如果表格單元格中的行高度與Mozilla的Almost一樣工作標準模式。

請注意,使用XML內容型別提供的XHTML以XML模式呈現。

此表的目的不是建議表中列出的所有文件型別都是新頁面的合理選擇。此表的目的是顯示我基於我的建議的資料。

列標題中使用以下簡寫表示法:

NS6

Mozilla 0.6 ... 0.9.4和Netscape 6.0 ... 6.2.3

老莫茲

Mozilla 0.9.5到1.1 alpha和Mozilla 1.0

Moz&Safari&Opera 10&IE10和HTML5

Mozilla 1.0.1,Mozilla 1.1 beta及更高版本,Firefox,Netscape 7及更高版本,Safari 0.9及更高版本,Opera 10及更高版本,Chrome,Konqueror 3.5,IE10,HTML5指定行為

Opera 9.0

Opera 9.0 ... 9.20

IE 8,IE 9和Opera 9.5

IE 8或IE 9預設情況下沒有X-UA-Compatible覆蓋或相容性檢視覆蓋(“A”表示IE8的IE8幾乎標準模式和IE9的IE9幾乎標準模式),Opera 7.5 ... 8.54和9.5 ... 9.6

IE 7和Opera 7.10

Windows IE 7,啟用了相容性檢視的IE 8但沒有X-UA-Compatible覆蓋(在本例中為“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;我無法確認)

文件型別 NS6 老莫茲 Moz&
Safari&
Opera 10 

IE10 
和HTML5
Opera 9.0 IE 8,IE 9和Opera 9.5 IE 7和Opera 7.10 IE 6和Opera 7.0 Mac IE 5 Konq 3.2
沒有 Q Q Q Q Q Q Q Q Q
<!DOCTYPE html> Q 小號 小號 小號 小號 一個 一個 一個  
<!DOCTYPE html SYSTEM "about:legacy-compat">  
<!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"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 小號 小號 小號 小號 小號 一個 一個 Q 一個
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/strict.dtd"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!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"> 小號 小號 一個 一個 一個 一個 一個 一個 Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> Q 小號 一個 一個 一個 一個 一個 一個 Q
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> Q Q Q Q 一個 一個 一個 一個 Q
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 小號 小號 小號 小號 小號 一個 一個 一個 一個
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 小號 小號 一個 一個 一個 一個 一個 一個 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">
小號 小號 小號 小號 小號 一個 Q 一個 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">
小號 小號 小號 小號 小號 一個 Q 一個 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">
小號 小號 小號 小號 小號 一個 Q 一個 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">
小號 小號 一個 一個 一個 一個 Q 一個 Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN"> Q 小號 小號 Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN"> Q 小號 小號 小號 小號 一個 一個 一個 Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HTML//EN"> 小號 小號 小號 Q Q Q Q Q Q
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HyperText Markup Language//EN"> 小號 小號 小號 小號 小號 一個 一個 一個 Q

歷史筆記

Mozilla的doctype嗅探程式碼在2000年10月,2001年9月和2002年6月發生了重大變化。本文件描述了Mozilla版本在2000-10-19及更高版本(以及Netscape 6.x上)在ftp.mozilla.org上提供的情況。 )。本文件沒有說明doctype嗅探在Mozilla M18(和Netscape 6.0 PR3)中的工作方式。自第一次公測以來,Safari的doctype嗅探程式碼也發生了重大變化。本文件未涵蓋v73之前版本的行為。0.9。

在版本3.5之前,Konqueror的doctype嗅探程式碼似乎來自Safari的早期版本。Konqueror現在匹配其doctype嗅探程式碼來自Mozilla的Safari。

從表中可以看出,Opera的doctype嗅探已經逐漸從IE變為Mozilla式,儘管Opera 9.5和9.6已經退步。與此同時,Opera的Quirks模式的佈局行為已經從模仿IE 6的Quirks模式轉向Mozilla的Quirks模式。

附錄:IE8的模式選擇

開始:轉到“X-UA相容meta?”。

X-UA相容meta

IE = 7:使用IE7標準。

IE = EmulateIE7:轉到“Quirky還是No Doctype?(相容模式)”。

IE = IE8或IE = IE7或IE = a或IE = EmulateIE8或不存在或script首先:轉到“X-UA相容的HTTP標頭?”。

IE = 8或IE = Edge或IE = 99或IE = 9.9:轉到“幾乎標準Doctype?”。

IE = 5:使用Quirks(IE 5.5)。

相容X-UA的HTTP標頭?

IE = 7:使用IE7標準。

IE = EmulateIE7:轉到“Quirky還是No Doctype?(相容模式)”。

IE = IE8或IE = IE7或IE = a或IE = EmulateIE8或不存在:轉到“顯示所有網站...首選設定?”。

IE = 8或IE = Edge或IE = 99或IE = 9.9:轉到“幾乎標準Doctype?”。

IE = 5:使用Quirks(IE 5.5)。

古怪還是沒有Doctype?(相容模式)

是:使用Quirks(IE 5.5)。

否:使用IE7標準。

顯示所有網站...首頁設定?

是的:轉到“Quirky or No Doctype?(相容模式)”。

否:轉到“顯示Intranet站點...首選項?”。

顯示Intranet站點... Pref Set?

是:轉到“站點是否在Intranet區域?”。

否:轉到“MS維護列表上的域名?”。

該網站是否位於Intranet區域?

是的:轉到“Quirky or No Doctype?(相容模式)”。

否:轉到“MS維護列表上的域名?”。

MS維護列表上的域名?

是的:轉到“Quirky or No Doctype?(相容模式)”。

否:轉到“框架相容模式頁面?”。

由相容模式頁面框架?

是的:轉到“Quirky or No Doctype?(相容模式)”。

否:轉到“壓縮相容模式按鈕?”。

按下相容模式按鈕?

是的:轉到“Quirky or No Doctype?(相容模式)”。

不:去“古怪或沒有Doctype