Javascript 我总是得到错误的输出

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') &

我已经创建了一个userAgent嗅探javascript应用程序(仅用于实验/学习目的),我几乎完成了。但是,对于$browser.version,我得到了整个userAgent字符串。我用谷歌搜索了一个又一个,找不到答案。这是我的密码:

// 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(" "))
    }
}