為什麼 IE11 和 IE10 的模擬文檔模式沒有 IE6?
為什麼可以模擬IE5,7,8,9,10唯獨沒有6呢?
先看一下歷史:
IE 從 8.0 開始支持 `X-UA-Compatible` 元標記(允許網頁作者指定 IE 用哪個內核來渲染頁面),並在其內置的開發工具中提供名為「文檔模式」的內核切換調試方式。從 IE8 開始,上述兩種方式(元標記、開發工具)就都沒提供 IE6 模式。
接下來,我們進一步分析一下為什麼唯獨沒有 IE6 模式:- IE5 本質上就是「怪癖模式 (Quirks Mode)」。IE 瀏覽器基於「向後兼容」的目的,必須要包含此內核,以便「正確」渲染早期網頁。(隨便說一句,事實上非 IE 瀏覽器也都是自帶 Quirks Mode 渲染模式的。這裡不展開,有興趣可以自行查詢「DTD」、「Quirks Mode」、「瀏覽器渲染模式」等關鍵詞。)因此,對 IE 瀏覽器的開發工具來說,提供 IE5 模式沒有任何成本;而且在渲染早期網頁時,必然就會進入此內核,開發工具不得不包含它。
- IE7 本質上是 IE6.1(至少我是這樣認為的)。相比 IE6 而言,IE7 沒有提供巨大的實質上的內核功能升級,更多地是在打補丁、修 bug。可以這樣說,IE6 和 IE7 這兩個版本的內核是嚴重同質化的;另一方面 IE6 的用戶量本身也在自然萎縮。因此當 IE8 推出時,它的元標記和開發工具就放棄了 IE6 模式。
- 微軟從 IE8 開始拚命追趕其它符合 W3C 標準的瀏覽器,IE8 之後每個版本的內核之間都存在巨大差異;而且從 IE8 開始,IE 幾乎以每年一個版本的速度在發布,幾世同堂的狀況會長期存在。這樣看來,在最新 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 or later
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
}
// There is no test for IE6 standards mode because that mode
// was replaced by IE7 standards mode; there is no emulation.
}
// the engine variable now contains the document compatibility mode.
}
都不支持IE6了吧,估計是這樣。
推薦閱讀:
TAG:前端開發 | HTML5 | InternetExplorer6 | 前端工程師 |