最近在做項(xiàng)目的時(shí)候,瀏覽器老是提示JQMIGRATE: jQuery is not compatible with Quirks Mode,一直想不通是為什么,查詢之后才知道原來瀏覽器是有模式的。下面是我對瀏覽器模式的簡單理解。
下面引自網(wǎng)絡(luò)
由于歷史的原因,各個(gè)瀏覽器在對頁面的渲染上存在差異,甚至同一瀏覽器在不同版本中,對頁面的渲染也不同。在W3C標(biāo)準(zhǔn)出臺(tái)以前,瀏覽器在對頁面的渲染上沒有統(tǒng)一規(guī)范,產(chǎn)生了差異(Quirks mode或者稱為Compatibility Mode);由于W3C標(biāo)準(zhǔn)的推出,瀏覽器渲染頁面有了統(tǒng)一的標(biāo)準(zhǔn)(CSScompat或稱為Strict mode也有叫做Standars mode),這就是二者最簡單的區(qū)別。
W3C標(biāo)準(zhǔn)推出以后,瀏覽器都開始采納新標(biāo)準(zhǔn),但存在一個(gè)問題就是如何保證舊的網(wǎng)頁還能繼續(xù)瀏覽,在標(biāo)準(zhǔn)出來以前,很多頁面都是根據(jù)舊的渲染方法編寫的,如果用的標(biāo)準(zhǔn)來渲染,將導(dǎo)致頁面顯示異常。為保持瀏覽器渲染的兼容性,使以前的頁面能夠正常瀏覽,瀏覽器都保留了舊的渲染方法(如:微軟的IE)。這樣瀏覽器渲染上就產(chǎn)生了Quircks mode和Standars mode,兩種渲染方法共存在一個(gè)瀏覽器上。
火狐一直工作在標(biāo)準(zhǔn)模式下,但I(xiàn)E(6,7,8)標(biāo)準(zhǔn)模式與怪異模式差別很大,主要體現(xiàn)在對盒子模型的解釋上,這個(gè)很重要,下面就重點(diǎn)說這個(gè)。
瀏覽器究竟該采用哪種模式渲染
這就引出的DTD,既是網(wǎng)頁的頭部聲明,瀏覽器會(huì)通過識(shí)別DTD而采用相對應(yīng)的渲染模式:
- 瀏覽器要使老舊的網(wǎng)頁正常工作,但這部分網(wǎng)頁是沒有doctype聲明的,所以瀏覽器對沒有doctype聲明的網(wǎng)頁采用quirks mode解析。
- 對于擁有doctype聲明的網(wǎng)頁,什么瀏覽器采用何種模式解析,這里有一張?jiān)敿?xì)列表可參考:http://hsivonen.iki.fi/doctype。
- 對于擁有doctype聲明的網(wǎng)頁,這里有幾條簡單的規(guī)則可用于判斷:對于那些瀏覽器不能識(shí)別的doctype聲明,瀏覽器采用strict mode解析。
- 在doctype聲明中,沒有使用DTD聲明或者使用HTML4以下(不包括HTML4)的DTD聲明時(shí),基本所有的瀏覽器都是使用quirks mode呈現(xiàn),其他的則使用strict mode解析。
- 可以這么說,在現(xiàn)有有doctype聲明的網(wǎng)頁,絕大多數(shù)是采用strict mode進(jìn)行解析的。
- 在ie6中,如果在doctype聲明前有一個(gè)xml聲明(比如:<?xml version=”1.0″ encoding=”iso-8859-1″?>),則采用quirks mode解析。這條規(guī)則在ie7中已經(jīng)移除了。
如何設(shè)置為怪異模式:
方法一:在頁面項(xiàng)部加
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
方法二:什么也不加。
如何設(shè)置為標(biāo)準(zhǔn)模式:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.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.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”>
XHTML1.0提供了三種DOCTYPE可選擇:
過渡型(Transitional )
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
嚴(yán)格型(Strict )
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
框架型(Frameset )
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>
如何判定現(xiàn)在是標(biāo)準(zhǔn)模式還是怪異模式:
方法一:執(zhí)行以下代碼
alert(window.top.document.compatMode) ;
//BackCompat 表示怪異模式
//CSS1Compat 表示標(biāo)準(zhǔn)模式
方法二:jquery為我們提供的方法,如下:
alert($.boxModel)
alert($.support.boxModel)
注意:
為了我們寫的代碼更好的兼容,請一定要讓瀏覽器使用標(biāo)準(zhǔn)模式渲染