Détection d'iOS
Je ne suis pas un fan de reniflement d'agent utilisateur, mais voici comment vous le feriez:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Une autre façon repose sur navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
sera soit true
oufalse
Pourquoi pas MSStream
Microsoft a injecté le mot iPhone dans IE11 userAgent
afin d'essayer de tromper Gmail d'une manière ou d'une autre. Nous devons donc l'exclure. Plus d'informations ici et ici .
Ci-dessous, la mise à jour d'IE11 userAgent
(Internet Explorer pour Windows Phone 8.1 Update):
Mozilla / 5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv: 11.0; IEMobile / 11.0; NOKIA; Lumia 930) comme iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, comme Gecko) Safari mobile / 537
Ajoutez facilement plus d'appareils, sans utiliser d'expressions régulières:
function iOS() {
var iDevices = [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
];
if (navigator.platform) {
while (iDevices.length) {
if (navigator.platform === iDevices.pop()){ return true; }
}
}
return false;
}
iOS()
sera soit true
oufalse
Remarque: Les deux navigator.userAgent
et navigator.platform
peuvent être falsifiés par l'utilisateur ou une extension de navigateur.
Détection de la version iOS
La façon la plus courante de détecter la version iOS consiste à l' analyser à partir de la chaîne de l'agent utilisateur . Mais il existe également une inférence de détection de fonctionnalité * ;
Nous savons pour un fait qui a history API
été introduit dans iOS4 - matchMedia API
dans iOS5 - webAudio API
dans iOS6 - WebSpeech API
dans iOS7 et ainsi de suite ..
Remarque: Le code suivant n'est pas fiable et se cassera si l'une de ces fonctionnalités HTML5 est déconseillée dans une version iOS plus récente. Tu étais prévenu!
function iOSversion() {
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
if (window.indexedDB) { return 'iOS 8 and up'; }
if (window.SpeechSynthesisUtterance) { return 'iOS 7'; }
if (window.webkitAudioContext) { return 'iOS 6'; }
if (window.matchMedia) { return 'iOS 5'; }
if (window.history && 'pushState' in window.history) { return 'iOS 4'; }
return 'iOS 3 or earlier';
}
return 'Not an iOS device';
}