Detectando iOS
No soy fanático de la detección de agentes de usuario, pero así es como lo haría:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Otra forma es confiar en navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
será cualquiera true
ofalse
¿Por qué no MSStream?
Microsoft inyectó la palabra iPhone en IE11 userAgent
para intentar engañar a Gmail de alguna manera. Por lo tanto, debemos excluirlo. Más información sobre esto aquí y aquí .
A continuación se muestra la actualización de IE11 userAgent
( actualización de Internet Explorer para Windows Phone 8.1):
Mozilla / 5.0 (móvil; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv: 11.0; IEMobile / 11.0; NOKIA; Lumia 930) como iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, como Gecko) Safari móvil / 537
Agregue fácilmente más dispositivos, sin usar Expresiones regulares:
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()
será cualquiera true
ofalse
Nota: Tanto navigator.userAgent
y navigator.platform
puede ser falsificada por el usuario o una extensión del navegador.
Detectando la versión de iOS
La forma más común de detectar la versión de iOS es analizarla desde la cadena del Agente de usuario . Pero también hay inferencia de detección de características * ;
Sabemos a ciencia cierta que history API
se introdujo en iOS4 , matchMedia API
en iOS5 , webAudio API
en iOS6 , WebSpeech API
en iOS7, etc.
Nota: El siguiente código no es confiable y se romperá si alguna de estas características HTML5 está en desuso en una versión más reciente de iOS. ¡Usted ha sido advertido!
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';
}