2014-02-07

jQuery 與 Quirks Mode

最近遇到的問題,$(window).width()$(window).height() 都回傳 0,但只限於 IE 某些版本,PM 最後鎖定是 Quirks Mode 才會有的問題。

Google 後發現,jQuery 1.8.1 以後就不支援 Quirks Mode 了

嗯,先了解一下什麼是 Quirks Mode,維基百科這麼說,嗯,有看沒有懂,再翻成中文看一次,有點概念,到底能不能講人話啊。

最後得到的理解是:
  • 相對於 Quirks Mode,有一個 Standard Mode(標準模式)。
  • Standard Mode 指的是瀏覽器完整支援 HTML/CSS,而 Quirks Mode 則是在標準出現以前,或者說 HTML/CSS 成為標準以前,各家瀏覽器各自表述的情形。
  • 然後當 HTML/CSS 成為標準,且各家瀏覽器開始完全支援時,在這之前已經開發的網頁怎麼辦?
  • 瀏覽器為了向前相容,所以切成兩種模式,也就是 Standard Mode 與 Quirks Mode。
  • 遇到舊的網頁就用 Quirks Mode 顯示,遇到新的網頁就用 Standard Mode 顯示。
  • 那怎麼區分新舊網頁呢?加上 DOCTYPE 就是新網頁,預設就會用 Standard Mode 顯示,舊的網頁沒有 DOCTYPE 就會用 Quirks Mode 顯示。
小結一下我遇到的問題:
  • 沒有加上 DOCTYPE  的網頁被舊版 IE 以 Quirks Mode 顯示。
  • 然後不小心用了新版的 jQuery。
  • 所以$(window).width()$(window).height()都回傳 0。
可能的解法:
  • 改用 jQuery 1.8.1 以前的版本。
  • 為網頁加上 DOCTYPE,記得要加在網頁的最最最前面,在 DOCTYPE 之前不能有任何字元,不然貼心的 IE 就會自動進入怪異模式(Quirks Mode)。
<!DOCTYPE html>
<html>...</html>
---
---
---

沒有留言:

張貼留言