web-dev-qa-db-fra.com

Récupérez la version Android dans le navigateur par Javascript

Je crée une application Web et je souhaite désactiver les effets de transition sur les appareils Android sous la version 3.0.

Est-il possible de récupérer le numéro de version Android par Javascript dans le navigateur? Si oui, comment?

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

Utilisez le code ci-dessous pour obtenir une version à 2 chiffres d'Android

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

Par exemple

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

renverra Android Version = 2.2

82
Gohel Kiran

Vous pouvez consulter la chaîne de l'agent utilisateur - window.navigator.userAgent Décrite ici: https://developer.mozilla.org/en/DOM/window.navigator.userAgent

Si ce que vous essayez vraiment de détecter est de savoir si vous disposez d'une version du navigateur qui prend en charge une fonctionnalité particulière, il est presque toujours préférable d'utiliser la détection des fonctionnalités plutôt que la détection de la version du navigateur. modernizr est une énorme base de code pour la détection de fonctionnalités que vous pouvez utiliser tel quel ou emprunter une pièce particulière ou simplement apprendre comment fonctionne la technique générale.

Lorsque je Google, je vois des chaînes d'agent utilisateur comme ceci pour 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

Une expression régulière de /Android\s+([\d\.]+)/ sur window.navigator.userAgent Récupérera le numéro de version Android.

8
jfriend00

Je ne peux pas commenter car je n'ai pas assez de représentants ... Je voulais juste ajouter que je devais changer le code de neiker en

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

pour le rendre insensible à la casse car le Galaxy S3 renvoyait "Android" au lieu de Android dans son agent utilisateur

7
jordan314

Ce code vérifie la version complète de Android de l'agent utilisateur.

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

Les agents utilisateurs du lecteur de Motorola peuvent avoir les éléments suivants:

Linux;Android ; Release/4.1.2

J'ai donc dû commencer à utiliser l'expression rationnelle suivante:

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

J'ai fait cette fonction et j'ai très bien fonctionné dans Android 2.6.3, 4.2.2., 6.0.1 dans différents navigateurs et appareils. Je pense que cela peut être une alternative.

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;
}

C'est assez simple, tout d'abord, recherchez le mot "Android". S'il n'est pas trouvé, renvoie 0 (n'est pas un Android). Recherchez ensuite le premier ';' après la position "Android" qui marque la fin de la version. Une fois que ces positions sont obtenu, la "tranche" isole les numéros de version (que "+8" supprime le mot "Android" du résultat final) puis revient.

Si quelqu'un trouve un défaut, ce serait bien de le partager.

2
Ney Cândido

1- Le téléphone Windows a introduit un faux agent utilisateur "Android", donc cet accord avec lui
2- Comme l'a souligné @andy, il existe des modèles avec ce format: Android /#.##
3- Vous pouvez utiliser le drapeau/i pour ne pas respecter la casse
4- Ce code vous redonne NaN quand ce n'est pas Android et la version en float quand elle l'est.
5- Si vous trouvez plus de faux téléphones Android téléphones, il vous suffit d'ajouter la chaîne comme ceci: (?: Windows phone | faux téléphone | Android ... ........

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

Il est préférable de vérifier d'abord si l'appareil est Android ou non, car Windows mobile peut avoir Android dans son agent utilisateur).

Exemple: Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1;;) AppleWebKit/(KHTML, comme Gecko) Chrome/Mobile Safari/Edge /.

Voici le moyen de le vérifier Détection d'iOS/Android Système d'exploitation

1
Sanchay Kumar