客戶端檢測(cè)
- 能力檢測(cè)
- 先檢測(cè)達(dá)到目的的最常用的特性。
- 必須檢測(cè)實(shí)際要用到的特性。
- 盡可能的使用typeof進(jìn)行能力檢測(cè)。對(duì)所有DOM方法都返回"function"。
- 如果知道自己的應(yīng)用程序需要使用某些特定的瀏覽器特性,最好是一次性檢測(cè)所有相關(guān)特性,而不是分開檢測(cè)。
- 怪癖檢測(cè)
- 識(shí)別瀏覽器的特殊行為,即想要知道瀏覽器存在什么缺陷。
- 建議僅檢測(cè)那些有直接影響的瀏覽器怪癖,且最好在腳本一開始就執(zhí)行此類檢測(cè)。
- 用戶代理檢測(cè)
- 通過檢測(cè)用戶代理字符串來確定實(shí)際使用的瀏覽器。在每一次HTTP請(qǐng)求過程中,用戶代理字符串是作為相應(yīng)首部發(fā)送的,且該字符粗可以通過JavaScript的navigator.userAgent屬性訪問到。
- 在服務(wù)器端,通過檢測(cè)用戶代理字符串來確定用戶使用的的瀏覽器是常用且能接受的做法。
- 在客戶端,用戶代理檢測(cè)排在能力檢測(cè)和怪癖檢測(cè)之后。
- 每個(gè)瀏覽器的用戶代理字符串都不盡相同,所以要分開識(shí)別。
- 用戶代理字符串檢測(cè)技術(shù)
- 識(shí)別呈現(xiàn)引擎
- Firefox,chrome和Netscape使用相同版本的GecKo,那么它們一定支持相同的特性。
- 不管什么瀏覽器,只要它和Safari3使用相同版本的WebKit,那么該瀏覽器就和Safari3有相同的功能。
- 所以,編寫的腳本主要檢測(cè)五大呈現(xiàn)引擎:Gecko,WbbKit,KHTML,IE和Opera。
- 檢測(cè)順序
- Opera。檢測(cè)window.opera對(duì)象,調(diào)用version()方法可以返回一個(gè)表示瀏覽器版本的字符串。
- WebKit。檢測(cè)其用戶代理字符串中的"AppleWebKit"。
- KHTML。KHTML的版本號(hào)與后繼的標(biāo)記之間有一個(gè)空格,所以要使用特殊的非空格字符來取得與版本號(hào)相關(guān)的所有字符。如果KHMTL不在用戶代理中,就要匹配Konqueror后跟一個(gè)斜杠,再后跟不包含分號(hào)的所有字符。
- Gecko。在用戶代理中,其版本號(hào)不會(huì)出現(xiàn)在字符串Gecko后面,而是出現(xiàn)在字符串"rv:"后。
- IE。其版本號(hào)位于字符串"MSIE"的后面,一個(gè)分號(hào)的前面。
- 識(shí)別瀏覽器
- 識(shí)別平臺(tái)
- 主流大三平臺(tái):windows,Mac,Unix(包含各種Linux)
- 使用navigator.platform,其屬性值在不同的瀏覽器中都是一致的。其屬性值有"Win32","Win64","MacPPC","MacIntel","Xll","Linux i686"。
- 識(shí)別windows系統(tǒng)
- 識(shí)別移動(dòng)設(shè)備
- 識(shí)別游戲系統(tǒng)
- 識(shí)別呈現(xiàn)引擎
小結(jié)
能力檢測(cè):在編寫代碼之前先檢測(cè)特定瀏覽器的能力。比如,腳本在調(diào)用某個(gè)函數(shù)之前,可能要先檢測(cè)函數(shù)時(shí)候存在。這種檢測(cè)方法將開發(fā)人員從考慮具體的瀏覽器類型和版本中解放出來,讓他們把注意力集中到相應(yīng)的能力是否存在上面。能力檢測(cè)無法檢測(cè)出特定的瀏覽器和版本。
怪癖檢測(cè):怪癖實(shí)際上是瀏覽器中存在的bug。怪癖檢測(cè)通常涉及到運(yùn)行一小段代碼,然后確定瀏覽器是否存在某個(gè)bug。怪癖檢測(cè)無法檢測(cè)出特定的瀏覽器和版本。
用戶代理檢測(cè):通過用戶代理字符串來識(shí)別瀏覽器。用戶代理字符串中包含大量與瀏覽器有關(guān)的信息,包括瀏覽器,平臺(tái),操作系統(tǒng),以及瀏覽器版本。有些瀏覽器會(huì)在用戶代理中添加一些欺騙性信息,欺騙網(wǎng)站相信自己是另一種瀏覽器。用戶代理檢測(cè)需要特殊技巧,特別要注意Opera瀏覽器會(huì)隱瞞其用戶代理字符串的情況。
綜上:優(yōu)先考慮能力檢測(cè),怪癖檢測(cè)是確定應(yīng)該如何處理代碼的第二選擇,最后才使用用戶代理檢測(cè)。