JavaScript >> Javascript 文檔 >  >> Tags >> document

Internet Explorer 8 文檔和瀏覽器模式

當 Microsoft 開始計劃 Internet Explorer 8 時,他們遇到了一個有趣的問題。他們願意承認 Internet Explorer 在渲染和腳本方面都有實現錯誤。然而,在承認這一點之後,他們遇到了通常被稱為“不要破壞互聯網”的問題。 Microsoft 無法知道有多少站點依賴於實現錯誤才能正常運行。他們對這個問題的最終解決方案很有趣:Internet Explorer 8 可以在各種不同的模式下運行。可能的模式數量之多有點令人生畏,但基本上可以歸結為兩種類型:文檔模式和瀏覽器模式。

文檔模式

頁面的文檔模式決定了它可以訪問哪些功能。這意味著有特定級別的 CSS 支持、特定數量的可用於通過 JavaScript 編寫腳本的功能以及處理文檔類型的特定方式。共有三種不同的文檔模式:

  • Internet Explorer 5 – 以 IE7 quirks 模式(也稱為 IE5 模式)呈現頁面。 IE8 中的新功能不可用。
  • Internet Explorer 7 – 以 IE7 標準模式呈現頁面。 IE8 中的新功能不可用。
  • Internet Explorer 8 – 以 IE8 標準模式呈現頁面。 IE8 中的新功能可用,因此您可以訪問 Selectors API、更多 CSS 2 選擇器、一些 CSS 3 功能、HTML 5 功能等。基本上,您可以獲得 IE8 所提供的一切。

文檔模式的概念對於理解 Internet Explorer 8 的工作原理非常重要。

強製文檔模式

您可以使用 X-UA-Compatible 強制特定的文檔模式 HTTP 標頭或使用 <meta> 標籤等效:

<meta http-equiv="X-UA-Compatible" content="IE=<em>IEVersion</em>">

該字段的 IE 版本有幾個不同的可能值,它們不必映射到三種文檔模式:

  • 邊緣 – 始終將文檔置於可用的最新文檔模式。文檔類型被忽略。對於 Internet Explorer 8,這將始終強製文檔模式為 IE8 標準。使用時要小心,因為當 Internet Explorer 9 出現時,這會強制頁面進入 IE9 標準模式。
  • 模擬IE8 – 如果存在 doctype,請將文檔模式設置為 IE8 標準,否則將文檔模式設置為 IE5。
  • 模擬IE7 – 如果存在 doctype,請將文檔模式設置為 IE7 標準,否則將文檔模式設置為 IE5。
  • 8 – 強製文檔模式為 IE8 標準。 Doctype 被忽略。
  • 7 – 強製文檔模式為 IE7 標準。 Doctype 被忽略。
  • 5 – 強製文檔模式為 IE5。 Doctype 被忽略。

例如,要使文檔模式的行為與 Internet Explorer 7 中的一樣,您可以使用以下命令:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">

而不管文檔類型如何強制使用 IE7 標準模式,使用這個:

<meta http-equiv="X-UA-Compatible" content="IE=7">

您不需要有 X-UA-Compatible 頁面上設置的字段。如果不存在,默認為 EmulateIE8 .

檢測文檔模式

您可以使用 document.documentMode 確定給定頁面的文檔模式 屬性 Internet Explorer 8 中的一個新功能,它返回 5、7 或 8:

var mode = document.documentMode;

使用此屬性可以提示您頁面的行為方式。此屬性適用於所有文檔模式。

瀏覽器模式

共有三種瀏覽器模式:Internet Explorer 8、Internet Explorer 8 兼容性和 Internet Explorer 7。這些模式以多種方式影響頁面,最明顯的是通過更改文檔模式和用戶代理字符串。默認情況下,瀏覽器模式設置為 Internet Explorer 8。

Internet Explorer 8 模式

默認情況下,瀏覽器在 Internet Explorer 8 模式下運行。文檔模式確定為 X-UA-Compatible 設置為 EmulateIE8。瀏覽器的用戶代理字符串包括 Internet Explorer 版本和 Trident(渲染引擎)版本。例如,我在我的機器上看到了這個:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

大多數頁面最終以 Internet Explorer 8 瀏覽器模式運行。

Internet Explorer 8 兼容模式

當最終用戶單擊刷新按鈕旁邊的兼容性視圖按鈕時,瀏覽器模式將更改為 Internet Explorer 8 兼容性。 IE8 兼容模式旨在模擬 Internet Explorer 7,因此文檔模式被確定為 X-UA-Compatible 設置為 EmulateIE7。瀏覽器的用戶代理字符串更改了 Internet Explorer 版本 7,但保留了 Trident(渲染引擎)版本。例如,我在我的機器上看到了這個:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

用戶代理字符串更改是為了確保任何依賴於用戶代理嗅探的代碼繼續像在 Internet Explorer 7 中運行一樣運行。離開 Trident 版本使開發人員有機會確定這實際上是 Internet Explorer 8 正在運行在兼容模式下。

Internet Explorer 7 模式

Internet Explorer 7 模式是所有瀏覽器模式中最令人好奇的,因為它似乎只是 IE 開發人員工具中的一個選項。該文檔指出,這用於在實際的 Internet Explorer 7 實例中測試您的站點,而不是在兼容模式下運行的 Internet Explorer 8。 Internet Explorer 7 將文檔模式確定為好像 X-UA-Compatible 設置為 EmulateIE7。此外,此模式完全無視 X-UA-Compatible 因此無法手動更改文檔模式(Internet Explorer 7 不支持 X-UA-Compatible 任何一個)。這意味著與其他瀏覽器模式不同,Internet Explorer 7 模式永遠不會有 IE8 標準的文檔模式。此外,用戶代理字符串已更改,因此 Trident 版本不再可用。這是在我的盒子上:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

似乎沒有任何其他方式可以讓最終用戶觸發 Internet Explorer 7 模式。因此,這似乎只是為開發人員提供的便利工具,讓我們免於需要,因此它似乎是開發人員主要使用的工具

總結

Internet Explorer 8 具有一些與其渲染和執行引擎相關的強大且令人困惑的功能。文檔模式用於確定頁面可用的功能,包括哪些 CSS 功能和哪些 JavaScript 功能已啟用和可用。您可以通過指定 X-UA-Compatible 的值來告訴瀏覽器您希望如何確定文檔模式 .

瀏覽器模式改變了當 X-UA-Compatible 時確定文檔模式的方式 未指定。他們還更改了用戶代理字符串,以便用戶代理嗅探器不會被破壞。在野外,您只會看到 Internet Explorer 8 模式和 Internet Explorer 8 兼容模式; Internet Explorer 7 模式似乎僅供開發人員使用。


Tutorial JavaScript 教程
  1. 可訪問的 UI 框架:注意事項

  2. 冠狀病毒鎖定:我了解了有關 QR 碼的更多信息並製作了生成器 PWA

  3. JavaScript如何使用沒有變異的遞歸從嵌套對象構建數組

  4. React - 結合 useMemo 和 Switch

  5. 為什麼我們使用 Terraform 在 AWS 上自託管我們的無服務器 Next.js 站點

  6. 我的學習發展進度💻💪🤯

  7. 我們如何使用 Vue 和 Webpack 為大學活動創建網站和 CMS

  1. 代碼戰第三天

  2. 學習正則表達式:初學者指南

  3. Jest 中的模塊模擬

  4. 使用 Node.js 從 URL 保存圖像

  5. 如何在 C# 中獲取 Javascript 變量值

  6. 需要幫助學習移動版 Web 開發

  7. 無論如何,什麼是甘特圖?

  1. 使用 Rust 編寫前端應用程序

  2. React 獲取數據指南

  3. 將 Firebase 與 React Native 集成

  4. 全棧作為現場風格