2012-10-06 105 views
0

我創建了一個userAgent嗅探JavaScript應用程序(用於實驗/學習的目的只有),我差不多完成了。但是,對於$ browser.version,我得到了整個userAgent字符串。我已經谷歌和google'd,找不到答案。這裏是我的代碼:我一直得到錯誤的輸出

// contemplate new $browser module 
var $browser, versionOffset, ua = navigator.userAgent; 

if(ua.toLowerCase().indexOf('opera') > -1) { 
    $browser = { 
     name: "Opera", 
     engine: "Presto", 
     prefix: "-o-", 
     publisher: "Opera Software ASA", 
     version: ua.substring(versionOffset + 6) 
    } 
} 

else if(ua.toLowerCase().indexOf('msie') > -1) { 
     $browser = { 
     name: "Internet Explorer", 
     engine: "Trident", 
     prefix: "-ms-", 
     publisher: "Microsoft", 
     version: ua.substring(versionOffset + 5) 
    } 
} 

else if(ua.toLowerCase().indexOf('chrome') > -1) { 
    $browser = { 
     name: "Chrome", 
     engine: "WebKit", 
     prefix: "-webkit-", 
     publisher: "Google Inc.", 
     version: ua.substring(versionOffset + 7) 
    } 
} 

else if(ua.toLowerCase().indexOf('safari') > -1) { 
    $browser = { 
     name: "Safari", 
     engine: "WebKit", 
     prefix: "-webkit-", 
     publisher: "Apple Computer Inc.", 
     version: ua.substring(versionOffset + 8) 
    } 
} 

else if(ua.toLowerCase().indexOf('firefox') > -1) { 
    $browser = { 
     name: "Firefox", 
     engine: "Gecko", 
     prefix: "-moz-", 
     publisher: "Mozilla", 
     version: ua.substring(versionOffset + 8) 
    } 
} 
在我的HTML

所以,我做:

<script> 
    alert($browser.name + " " + $browser.version); 
</script> 

但我在Chrome輸出爲:

[JavaScript提醒]:

Chrome瀏覽器($ browser.name)
Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.4(KHTML,如Gecko)Chrome/22.0.122 9.91 Safari瀏覽器/ 537.4(browser.version $)

但我想,顯然是 「Chrome瀏覽器22」 或 「鉻22.0.1229.91」

+1

什麼是versionOffset,你從來沒有在任何地方設置它。 – aquinas

+0

那麼,經過研究,好像我應該使用一個佔位符變量作爲基礎,所以我將其命名爲versionOffset,我應該不這樣做嗎? – ModernDesigner

回答

1

這修復它 - 2DIGIT版本號返回。

您需要設置versionOffset,如前所述。

else if(ua.toLowerCase().indexOf('chrome') > -1) 
{ 
    versionOffset = ua.toLowerCase().indexOf('chrome'); 

    $browser = { 
     name: "Chrome", 
     engine: "WebKit", 
     prefix: "-webkit-", 
     publisher: "Google Inc.", 
     version: ua.substr(versionOffset+7, 2) 
    } 
} 
+0

謝謝!而已! :) – ModernDesigner

0

你的代碼對我來說沒有多大意義。你必須使用東西像versionOFfset等。另外,請注意,做這樣的事情:ua.substring(versionOffset + 8)將返回從versionOffset + 8開始的整個字符串。所以,因爲你從來沒有真正設置過versionOffset,所以它是未定義的,所以這樣做:versionOffset + 8返回NaN,JS有用地忽略它並決定用一個零代替NaN(基本上),所以你最終得到整個ua字符串回。這裏就是你要找的,可能是更接近於一個小提琴:

http://jsfiddle.net/WFEZW/

else if((versionOffset = ua.toLowerCase().indexOf('chrome')) > -1) { 
    $browser = { 
     name: "Chrome", 
     engine: "WebKit", 
     prefix: "-webkit-", 
     publisher: "Google Inc.", 
     version: ua.substring(versionOffset + 7).substring(0, ua.indexOf(" ")) 
    } 
} 

看我怎麼在if語句設置versionOffset,然後我期待爲先「」後的版本。這並不意味着在現實世界中使用,但正如你所說,你只是想學習。

+0

是的,我看到它是如何返回用戶代理的其餘部分的,我剛剛發現如何在我看到這個時找到補救辦法。謝謝!是的,我知道這並不是完全可靠或絕不可信,但我已經永遠使用了jQuery,而現在我剛開始學習Javascript的基礎。謝謝! – ModernDesigner

+0

嗯,但在Opera(9)中它返回Opera 9.80(風,儘管它應該修剪空格(「」) – ModernDesigner

+0

當然,這就是爲什麼瀏覽器嗅探沒有完成.jQuery甚至沒有做到這一點不管怎麼說:http://api.jquery.com/jQuery.browser/ – aquinas

相關問題