Detecta la versión de iOS less de 5 con JavaScript

Esto está relacionado con la "solución" para la position: se fija en versiones anteriores de iOS. Sin embargo, si se instala iOS5 o superior, la solución rompe la página.

cómo detectar iOS 5: navigator.userAgent.match(/OS 5_\d like Mac OS X/i) pero eso no funcionará para iOS6 cuando llegue, o incluso iOS 5.0.1, solo un 2 versión de dígito

Entonces esto es lo que tengo 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(); } }); 

Este fragment de código se puede usar para determinar cualquier versión de iOS 2.0 y posterior.

 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 respuesta de Pumbaa80 fue casi del 100%, solo dejó una parte. Algunos lanzamientos iOS tienen un tercer dígito en ellos.

Ejemplo

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

El seguimiento permite eso

 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 } } 

Ese bit extra (_ \ d)? permite la posibilidad de un tercer dígito en el número de versión. Charlie S, eso debería responder a tu pregunta también.

Tenga en count lo demás porque la primera verificación no funcionará en iOS 1. iOS 1 para iPhone y iPod no incluyó un número de versión en su cadena 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 

Todo esto se puede encontrar en el siguiente enlace en el website de Apple aquí .

Agregando a la respuesta de Pumbaa80. La cadena de versión puede ser 4_0 , 5_0_1 , 4_0_4 , etc., por lo que las testings contra [1-4]_/d (un guión y un número único) no son adecuados. El siguiente JavaScript está funcionando para mí para varias sub-versiones de 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. } } 

Primero: no uses match cuando una test sea ​​suficiente.

Segundo: debes probar al revés. Encuentra los UA que se sabe están rotos.

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

Aquí hay un poco de JS para determinar la versión del sistema iOS y Android.

Probado con cadenas de agente de usuario reales para iOS 4.3 a 6.0.1 y Android 2.3.4 a 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'; } } 

Luego, para detectar una versión específica y superior, intente:

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

Simplemente ejecute este código en el dispositivo / browser

 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!'); } } 

Esta variable iphone_version le dará la versión correcta del sistema operativo para cualquier dispositivo iPhone.

Como ya se mencionó anteriormente, las versiones de iOS pueden tener más de dos numbers. Por lo que sé, actualmente son tres como máximo, pero tengo una solución que funcionará en caso de que una versión contenga más numbers (p. Ej., 5.1.1.3). El componente detect-os-version también lo ayudará a verificar la versión para otras plataforms, como Android, Mac, Windows, BlackBerry …

Siéntase libre de importarlo y utilizar como se muestra en estos ejemplos:

 detectOsVersion.get() => {os: 'iOS', version: '5.1.1'} detectOsVersion.get() => {os: 'BlackBerry', version: '7.1.0.346'} detectOsVersion.get() => {os: 'Windows', version: '8.1'} detectOsVersion.get() => {os: 'Android', version: '4.2.2'} detectOsVersion.get() => {os: 'Mac', version: '10.7.1'} 

Para responder a la pregunta específica, este código debería hacerlo:

 const osInfo = detectOsVersion.get(); if (osInfo.os == 'iOS' && parseInt(osInfo.version) < 5) { // Do something } 

Analice más el número de versión ("5"), luego agregue una condición donde el número sea mayor que / menor que el número de versión.