web-dev-qa-db-fra.com

Détecter la version iOS inférieure à 5 avec JavaScript

Ceci est lié au "correctif" de la position: corrigé dans les anciennes versions d'iOS. Toutefois, si iOS5 ou une version ultérieure est installée, le correctif coupe la page.

Je sais comment détecter iOS 5: navigator.userAgent.match(/OS 5_\d like Mac OS X/i) mais cela ne fonctionnera pas pour iOS6 lorsqu'il arrivera, ou même pour iOS 5.0.1, uniquement en version à 2 chiffres.

C'est donc ce que j'ai atm.

$(document).bind("scroll", function() {
    if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
        if (navigator.userAgent.match(/OS 5_\d like Mac OS X/i)) {
    }
    else {
        changeFooterPosition();
    }
});

Cet extrait de code peut être utilisé pour déterminer n'importe quelle version d'iOS 2.0 et versions ultérieures.

function iOSversion() {
  if (/iP(hone|od|ad)/.test(navigator.platform)) {
    // supports iOS 2.0 and later: <http://bit.ly/TJjs1V>
    var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
    return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
  }
}

ver = iOSversion();

if (ver[0] >= 5) {
  alert('This is running iOS 5 or later.');
}
113
Peter T Bosse II

La réponse de Pumbaa80 était presque de 100%, il a juste laissé de côté une partie. Certaines versions d'iOS ont un troisième chiffre.

Exemple

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en_us) AppleWebKit/525.18.1 (KHTML, like Gecko)

La suite permet que 

if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) { 
    if(/OS [2-4]_\d(_\d)? like Mac OS X/i.test(navigator.userAgent)) {  
        // iOS 2-4 so Do Something   
    } else if(/CPU like Mac OS X/i.test(navigator.userAgent)) {
        // iOS 1 so Do Something 
    } else {
        // iOS 5 or Newer so Do Nothing
    }
}

Ce petit extra (_\d)? permet la possibilité d’un troisième chiffre dans le numéro de version . Charlie S, cela devrait aussi répondre à votre question.

Notez le contraire car la première vérification ne fonctionnera pas sur iOS 1. iOS 1 pour iPhone et iPod n'a pas inclus de numéro de version dans sa chaîne UserAgent.

iPhone v 1.0

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3

iPod v1.1.3

Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3

Vous pouvez trouver tout cela au lien suivant sur Le site Web d'Apple, ici .

11
JDubDev

Ajoutant à la réponse de Pumbaa80. La chaîne de version peut être 4_0, 5_0_1, 4_0_4, etc., de sorte que le test par rapport à [1-4]_/d (un trait de soulignement et un nombre) n'est pas adéquat. Le JavaScript ci-dessous fonctionne pour moi pour différentes sous-versions d'iOS 3-5:

if (/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) {
    if (/OS [1-4](.*) like Mac OS X/i.test(navigator.userAgent)) {
      // iOS version is <= 4.
    } else {
      // iOS version is > 4.
    }
  }
4
Charlie Schliesser

Premièrement: n'utilisez pas match quand test est suffisant.

Deuxièmement: vous devriez tester l’inverse. Trouvez les UA qui sont connus pour être cassés.

if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) {
    if (/OS [1-4]_\d like Mac OS X/i.test(navigator.userAgent)) {
        changeFooterPosition();
...
3
user123444555621

Voici un peu de JS pour déterminer la version des systèmes d'exploitation iOS et Android.

Testé avec les chaînes d'agent d'utilisateur réelles pour iOS 4.3 à 6.0.1 et Android 2.3.4 à 4.2

var userOS;    // will either be iOS, Android or unknown
var userOSver; // this is a string, use Number(userOSver) to convert

function getOS( )
{
  var ua = navigator.userAgent;
  var uaindex;

  // determine OS
  if ( ua.match(/iPad/i) || ua.match(/iPhone/i) )
  {
    userOS = 'iOS';
    uaindex = ua.indexOf( 'OS ' );
  }
  else if ( ua.match(/Android/i) )
  {
    userOS = 'Android';
    uaindex = ua.indexOf( 'Android ' );
  }
  else
  {
    userOS = 'unknown';
  }

  // determine version
  if ( userOS === 'iOS'  &&  uaindex > -1 )
  {
    userOSver = ua.substr( uaindex + 3, 3 ).replace( '_', '.' );
  }
  else if ( userOS === 'Android'  &&  uaindex > -1 )
  {
    userOSver = ua.substr( uaindex + 8, 3 );
  }
  else
  {
    userOSver = 'unknown';
  }
}

Ensuite, pour détecter une version spécifique et ultérieure, essayez:

if ( userOS === 'iOS' && Number( userOSver.charAt(0) ) >= 5 ) { ... }
3
Jim Bergman

Il suffit simplement d'exécuter ce code dans l'appareil/le navigateur

if(window.navigator.userAgent.match( /iP(hone|od|ad)/)){

    var iphone_version= parseFloat(String(window.navigator.userAgent.match(/[0-9]_[0-9]/)).split('_')[0]+'.'+String(window.navigator.userAgent.match(/[0-9]_[0-9]/)).split('_')[1]);

    // iPhone CPU iPhone OS 8_4 like Mac OS X

    alert(iphone_version); // its alert 8.4

    if(iphone_version >= 8){
       alert('iPhone device, iOS 8 version or greater!');
    }
}

Cette variable iphone_version vous donnera la version correcte du système d'exploitation pour tout appareil iPhone.

2
maSC0d3R

Je ne pouvais pas vraiment trouver ce que je cherchais, j'ai donc repris les idées de cette page et d'autres pages du réseau et je les ai trouvées. J'espère que d'autres le trouveront utile aussi.

function iOS_version() { 
    if(navigator.userAgent.match(/ipad|iphone|iPod/i)){ //if the current device is an iDevice
    var ios_info ={};
    ios_info.User_Agent=navigator.userAgent;
    ios_info.As_Reported=(navigator.userAgent).match(/OS (\d)?\d_\d(_\d)?/i)[0];
    ios_info.Major_Release=(navigator.userAgent).match(/OS (\d)?\d_\d(_\d)?/i)[0].split('_')[0];
    ios_info.Full_Release=(navigator.userAgent).match(/OS (\d)?\d_\d(_\d)?/i)[0].replace(/_/g,".");
    ios_info.Major_Release_Numeric=+(navigator.userAgent).match(/OS (\d)?\d_\d(_\d)?/i)[0].split('_')[0].replace("OS ","");
    ios_info.Full_Release_Numeric=+(navigator.userAgent).match(/OS (\d)?\d_\d(_\d)?/i)[0].replace("_",".").replace("_","").replace("OS ","");   //converts versions like 4.3.3 to numeric value 4.33 for ease of numeric comparisons
    return(ios_info);
    }
}

Il vous permet d’obtenir la version majeure et le numéro complet de la version sous forme de chaîne ou sous forme de numéro pour iOS.

Exemple de chaîne d'agent utilisateur:

 Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 comme Mac OS X) AppleWebKit/536.26 (KHTML comme Gecko) Mobile/10B329 

Usage:

var iOS=iOS_version();
console.log(iOS.Full_Release); //returns values in form of "OS 6.1.3"
console.log(iOS.Full_Release_Numeric); //returns values in form of 6.13
//useful for comparisons like if(iOS.Full_Release_Numeric >6.2)

console.log(iOS.Major_Release); //returns values in form of "OS 6"
console.log(iOS.Major_Release_Numeric); //returns values in form of 6
//useful for comparisons like if(iOS.Major_Release_Numeric >7)

console.log(iOS.As_Reported); //returns values in form of "OS 6_1_3"
console.log(iOS.User_Agent); //returns the full user agent string

Dans le cas de la question d'origine sur cette page, vous pouvez utiliser ce code de la manière suivante:

var iOS=iOS_version();
$(document).bind("scroll", function() {
    if(iOS){if(iOS.Major_Release_Numeric <5) {} 
    else {changeFooterPosition();}
    }
});   
1
Joshua A

Poursuivez l'analyse du numéro de version ("5"), puis ajoutez une condition dans laquelle si le numéro est supérieur/inférieur au numéro de version.

0
Joshua
function getIOSVersion() {
    const ua = navigator.userAgent;
    if (/(iPhone|iPod|iPad)/i.test(ua)) {
        return ua.match(/OS [\d_]+/i)[0].substr(3).split('_').map(n => parseInt(n));
    }
    return [0];
}

Cela renverra un tableau avec les numéros de version individuels tels que [10,0,1] pour v10.0.1, ou le défaut sera [0] sinon. Vous pouvez vérifier le premier chiffre (la version principale) ou tous ceux-ci pour tester les versions dont vous avez besoin. 

0
Mani Gandham