0

我已经创建了一个 userAgent 嗅探 javascript 应用程序(用于实验/学习目的),我几乎完成了。但是,对于 $browser.version,我得到了整个 userAgent 字符串。我已经 google'd 和 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, like Gecko) Chrome/22.0.1229.91 Safari/537.4 ($browser.version)

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

4

2 回答 2

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)
    }
}
于 2012-10-06T03:12:21.633 回答
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 的,然后我在版本之后寻找第一个“”。这并不意味着在现实世界中使用,但就像你说的,你只是想学习。

于 2012-10-06T03:21:34.483 回答