2012-10-06 107 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

相关问题