web-dev-qa-db-ja.com

JavaScriptを使用してブラウザでAndroidバージョンを選択します

Webアプリを構築していて、Androidバージョン3.0のデバイスでのトランジション効果を無効にしたい。

とにかくAndroidブラウザのJavascriptでバージョン番号を取得しますか?その場合はどうしますか?

60
Daniel Ryan
function getAndroidVersion(ua) {
    ua = (ua || navigator.userAgent).toLowerCase(); 
    var match = ua.match(/Android\s([0-9\.]*)/);
    return match ? match[1] : undefined;
};

getAndroidVersion(); //"4.2.1"
parseInt(getAndroidVersion(), 10); //4
parseFloat(getAndroidVersion()); //4.2
77
neiker

以下のコードを使用して、Androidの2桁バージョンを取得します

var ua = navigator.userAgent;
if( ua.indexOf("Android") >= 0 )
{
  var androidversion = parseFloat(ua.slice(ua.indexOf("Android")+8)); 
  if (androidversion < 2.3)
  {
      // do whatever
  }
}

例えば

Mozilla/5.0(Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO)AppleWebKit/533.1(KHTML、Geckoなど)バージョン/4.0 Mobile Safari/533.1

Android Version = 2.2を返します

82
Gohel Kiran

ユーザーエージェント文字列を見ることができます-_window.navigator.userAgent_ここで説明されています: https://developer.mozilla.org/en/DOM/window.navigator.userAgent

特定の機能をサポートするバージョンのブラウザーがあるかどうかを実際に検出しようとしている場合、ブラウザーのバージョン検出の代わりに機能検出を使用する方がほぼ常に良いです。 modernizrは、機能検出のための巨大なコードのベースであり、そのまま使用することも、特定の部分を借用することも、一般的な手法の仕組みを学ぶこともできます。

私がグーグルで検索すると、Androidには次のようなユーザーエージェント文字列が表示されます。

_Mozilla/5.0 (Linux; U; Android 2.2.1; fr-ch; A43 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
_

_window.navigator.userAgent_の/Android\s+([\d\.]+)/の正規表現は、Androidバージョン番号を取得します。

8
jfriend00

十分な担当者がいないのでコメントできません...ただ、追加したいのは、ネイカーのコードを

var match = ua.match(/Android\s([0-9\.]*)/i);

galaxy S3がユーザーエージェントでAndroidではなくAndroidを返していたため、大文字と小文字を区別しません

7
jordan314

このコードは、useragentのAndroidの完全版をチェックします。

var test = LowerThanAndroidVersion('4.4');
if (test) {
    alert('lower than Android 4.4')
} else if (test == undefined) {
    alert('no Android')
} else {
    alert('Android 4.4 or higher');
}    

function LowerThanAndroidVersion(testversion) {
    //var useragent = 'Mozilla/5.0 (Linux; U; Android 4.3.1; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';
    var useragent = navigator.userAgent;
    var androidpoint = useragent.indexOf('Android');
    if (androidpoint >= 0) {
        var rest = useragent.substring(androidpoint + 8, useragent.length);
        var version = rest.substring(0, rest.indexOf(';'));
        return (version < testversion) ? true : false;
    }
}
2
MdR

モトローラのプレーヤーユーザーエージェントには次のものがあります。

Linux;Android ; Release/4.1.2

そのため、次の正規表現の使用を開始する必要がありました。

[a|A]ndroid[^\d]*([\d[_|.]]+\d)
2
andy

この関数を作成し、Android 2.6.3、4.2.2。、6.0.1で異なるブラウザーとデバイスで非常にうまく機能しました。代替手段になる可能性があります。

function check_Android_version()
{
    var ua = navigator.userAgent; 
    ua = ua.toLowerCase();

    var and_pos = ua.search("Android");
    if(and_pos == -1)
        return 0; //not Android

    var pv_pos = ua.indexOf(";", and_pos);
    var versao = ua.slice(and_pos+8, pv_pos);

    return versao;
}

これは非常に簡単です。まず、「Android」という単語を検索します。見つからない場合、0を返します(Androidユーザーエージェントではありません)。その後、バージョンの終了を示す「Android」の位置の後の最初の「;」を検索します。取得すると、「スライス」はバージョン番号を絶縁し(「+8」は最終結果の「Android」という単語を削除します)、その後戻ります。

誰かが欠陥を見つけた場合、共有するのはいいでしょう。

2
Ney Cândido

1- Windows Phoneは偽の「Android」ユーザーエージェントを導入したため、これに対処します
2- @andyが指摘したように、この形式のモデルがいくつかあります:Android /#.##
3-大文字と小文字を区別しないためにフラグ/ iを使用できます
4-このコードは、Androidでない場合はNaNを返し、ある場合はバージョンをfloatとして返します。
5-もっと多くの偽のAndroid電話を見つけたら、次のような文字列を追加するだけです。(?: windows phone | fake phone | Android ... ........

alert( parseFloat(navigator.userAgent.match(/.*?(?:windows phone|Android\D+([0-9\.]*))|()/i)[1]) );
1
YOGO

Windows MobileがユーザーエージェントにAndroidを持つことができるので、デバイスがAndroidかどうかを最初に確認することをお勧めします。

例:Mozilla/5.0(Windows Phone 10.0; Android 4.2.1;;)AppleWebKit /(KHTML、Geckoなど)Chrome/Mobile Safari/Edge /。

これを確認する方法があります iOSの検出/ Androidオペレーティングシステム

1
Sanchay Kumar