Rilevamento di iOS
Non sono un fan dello sniffing di User Agent, ma ecco come lo faresti:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Un altro modo è fare affidamento su navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
sarà o true
ofalse
Perché non MSStream
Microsoft ha inserito la parola iPhone in IE11 userAgent
per cercare di ingannare Gmail in qualche modo. Pertanto dobbiamo escluderlo. Maggiori informazioni su questo qui e qui .
Di seguito è aggiornato IE11 userAgent
( aggiornamento di Internet Explorer per Windows Phone 8.1):
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) come iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, come Gecko) Safari mobile / 537
Aggiungi facilmente più dispositivi, senza utilizzare le espressioni regolari:
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()
sarà o true
ofalse
Nota: entrambi navigator.userAgent
e navigator.platform
possono essere simulati dall'utente o da un'estensione del browser.
Rilevamento della versione iOS
Il modo più comune di rilevare la versione di iOS è analizzarla dalla stringa User Agent . Ma c'è anche un'inferenza sul rilevamento delle caratteristiche * ;
Sappiamo per certo che è history API
stato introdotto in iOS4 - matchMedia API
in iOS5 - webAudio API
in iOS6 - WebSpeech API
in iOS7 e così via ...
Nota: il codice seguente non è affidabile e si interromperà se una di queste funzionalità HTML5 è obsoleta in una versione iOS più recente. Sei stato avvertito!
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';
}