我一直得到错误的输出

时间:2012-10-06 02:58:06

标签: javascript html google-chrome browser user-agent

我创建了一个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.1229.91 Safari / 537.4($ browser.version)

但我想要,显然是“Chrome 22”或“Chrome 22.0.1229.91”

2 个答案:

答案 0 :(得分:1)

这修复了它 - 返回了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)
    }
}

答案 1 :(得分: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,然后在版本之后查找第一个“”。这并不意味着在现实世界中使用,但就像你说的那样,你只是想学习。