Javascript 我总是得到错误的输出
我已经创建了一个userAgent嗅探javascript应用程序(仅用于实验/学习目的),我几乎完成了。但是,对于$browser.version,我得到了整个userAgent字符串。我用谷歌搜索了一个又一个,找不到答案。这是我的密码:Javascript 我总是得到错误的输出,javascript,html,google-chrome,browser,user-agent,Javascript,Html,Google Chrome,Browser,User Agent,我已经创建了一个userAgent嗅探javascript应用程序(仅用于实验/学习目的),我几乎完成了。但是,对于$browser.version,我得到了整个userAgent字符串。我用谷歌搜索了一个又一个,找不到答案。这是我的密码: // contemplate new $browser module var $browser, versionOffset, ua = navigator.userAgent; if(ua.toLowerCase().indexOf('opera') &
// 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>
警报($browser.name++$browser.version);
但我在chrome中的输出是:
[JavaScript警报]:
Chrome($browser.name)Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.4(KHTML,类似Gecko)Chrome/22.0.1229.91 Safari/537.4($browser.version)
但是我想,显然是“Chrome 22”或“Chrome 22.0.1229.91”这会修复它-返回2个数字版本号 正如前面提到的,您需要设置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)
}
}
你的代码对我来说没有多大意义。您必须使用versionOFfset等。另外,请注意这样做:
ua.substring(versionOFfset+8)
将返回从versionOFfset+8开始的整个字符串。因此,由于您从未实际设置versionOffset,它是未定义的,所以这样做:versionOffset+8返回NaN,JS很有帮助地忽略了这一点,并决定用零代替NaN(基本上),因此最终返回整个ua字符串。这里有一把小提琴可能更接近你要找的东西:
查看如何在if语句中设置versionOffset,然后查找版本后的第一个“”。这并不意味着要在现实世界中使用,但正如你所说,你只是在尝试学习 什么是versionOffset,你从来没有在任何地方设置过它。好吧,在做了研究之后,似乎我应该使用占位符变量作为基础,所以我把它命名为versionOffset,我应该不这样做吗?是的,我看到它如何返回用户代理的其余部分,当我看到这一点时,我正处于找到补救方法的边缘。谢谢是的,我知道这不是完全可靠的,也不可能是可信的,但我一直使用jQuery,我现在刚刚开始学习JavaScript的基础。谢谢嗯,但在Opera(9)中,它返回Opera 9.80(风)。尽管它应该按空格(“”)进行修剪当然。这就是为什么浏览器嗅探没有完成。jQuery甚至不再做了:啊,是的。那太糟糕了。一开始似乎是个好主意。啊,好吧,那是一个有趣的小冒险,晚上进入JavaScript世界。哈哈。也许下次我会尝试打破功能检测。谢谢你的回答!
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(" "))
}
}