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.');
}
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 .
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.
}
}
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();
...
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 ) { ... }
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.
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();}
}
});
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.
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.