0

私は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>

しかし、クロムでの私の出力は次のとおりです。

[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)

しかし、私は明らかに「Chrome22」または「Chrome22.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 に答える