2011-05-08 73 views
1
var user = navigator.userAgent; 
var browser = {}; 
browser.opera = user.indexOf("Opera") > -1 && typeof window.opera == "object"; 
browser.khtml = (user.indexOf("KHTML") > -1 || user.indexOf("AppleWebKit") > -1 || user.indexOf("Konqueror") > -1) && !browser.opera; 
browser.ie = user.indexOf("MSIE") > -1 && !browser.opera; 
browser.gecko = user.indexOf("Gecko") > -1 && !browser.khtml; 
if (browser.ie) { 
    var ie_reg = /MSIE (\d+\.\d+);/; 
    ie_reg.test(user); 
    var v = parseFloat(RegExp["$1"]); 
    browser.ie55 = v <= 5.5; 
    browser.ie6 = v <= 6; 
} 

最近,我正在學習JavaScript。我看到一些代碼來檢查瀏覽器,但我無法順利完成。代碼對我來說太難了。可以向我解釋嗎?非常感謝。使用JavaScript檢查瀏覽器

+0

不完全是問堆棧溢出的方式......你需要提出具體的問題。 – 2011-05-08 12:23:16

+2

稍有偏離主題,但:檢查用戶正在使用的瀏覽器很少合適。相反,代碼應該檢查它需要的* features *。這被稱爲「功能檢測」而不是「瀏覽器檢測」,代表了當前爲網絡編寫JavaScript的最佳做法。功能測試[這是一個很棒的集合](http://kangax.github.com/cft/); [這裏是另一個好集](http://diveintohtml5.org/detect.html),專門針對HTML5的東西。 – 2011-05-08 12:27:52

+1

@downvoter,@closevoters:我認爲這個問題相當清楚,並且也收到了相當好的答案。 @runeveryday需要解釋代碼正在做什麼,@ pimvdb已經完成了。 – 2011-05-08 12:29:11

回答

6

navigator.userAgent包含一個字符串,其中包含有關當前瀏覽器的數據。

在第二行代碼中,您創建了一個空的browser對象。然後,根據瀏覽器添加的屬性是truefalse。例如,如果瀏覽器是Opera,則Opera這個詞在navigator.userAgent的某處。 KHTML和Gecko也同樣如此。

要真正檢查字符串是否包含某些字符/單詞,可以使用indexOf。這將返回單詞開始處的索引。如果它沒有出現在字符串中,則返回-1。因此檢查> -1意味着檢查它是否包含該詞。

說到IE,您可以通過在navigator.userAgent上執行正則表達式來區別版本5.5和版本6。這是你放在字符串上的一種形狀,可以過濾掉你需要的東西。您檢查解析出的版本是5.5還是6,並適當地存儲該數據。

因此,最終browser對象包含使用瀏覽器的值。

+0

+1值得討論的是'indexOf'的東西,只是爲了完整性。 – 2011-05-08 12:29:27

+0

很好的答案。它指出應該執行能力檢測以支持用戶代理嗅探。 http://stackoverflow.com/questions/5733268/apples-recommendation-on-browser-sniffing – ditkin 2011-05-08 12:29:29