我一直得到错误的输出
我创建了一个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”
这修复它 - 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)
}
}
谢谢!而已! :) – ModernDesigner
你的代码对我来说没有多大意义。你必须使用东西像versionOFfset等。另外,请注意,做这样的事情:ua.substring(versionOffset + 8)
将返回从versionOffset + 8开始的整个字符串。所以,因为你从来没有真正设置过versionOffset,所以它是未定义的,所以这样做:versionOffset + 8返回NaN,JS有用地忽略它并决定用一个零代替NaN(基本上),所以你最终得到整个ua字符串回。这里就是你要找的,可能是更接近于一个小提琴:
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,然后我期待为先“”后的版本。这并不意味着在现实世界中使用,但正如你所说,你只是想学习。
是的,我看到它是如何返回用户代理的其余部分的,我刚刚发现如何在我看到这个时找到补救办法。谢谢!是的,我知道这并不是完全可靠或绝不可信,但我已经永远使用了jQuery,而现在我刚开始学习Javascript的基础。谢谢! – ModernDesigner
嗯,但在Opera(9)中它返回Opera 9.80(风,尽管它应该修剪空格(“”) – ModernDesigner
当然,这就是为什么浏览器嗅探没有完成.jQuery甚至没有做到这一点不管怎么说:http://api.jquery.com/jQuery.browser/ – aquinas
什么是versionOffset,你从来没有在任何地方设置它。 – aquinas
那么,经过研究,好像我应该使用一个占位符变量作为基础,所以我将其命名为versionOffset,我应该不这样做吗? – ModernDesigner