redirigirlos - Detecta la versión de iOS menos de 5 con JavaScript
detectar navegador javascript (10)
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 la prueba en contra de [1-4]_/d
(un guion bajo y un número) no es adecuada. El siguiente JavaScript me funciona para varias subversiones 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.
}
}
Esto está relacionado con la "solución" para la posición: corregida en versiones anteriores de iOS. Sin embargo, si iOS5 o superior está instalado, la corrección rompe la página.
Sé cómo detectar iOS 5: navigator.userAgent.match(/OS 5_/d like Mac OS X/i)
pero eso no funcionará para iOS6 cuando finalmente 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();
}
});
Analice aún más el número de versión ("5"), luego agregue una condición donde el número es mayor que / menor que el número de versión.
Aquí hay un poco de JS para determinar la versión del sistema operativo iOS y Android.
Probado con cadenas reales de agente de usuario 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 ) { ... }
Como muchos ya han mencionado aquí, las versiones de iOS pueden tener más de dos números. Hasta donde sé, actualmente son tres como máximo, pero tengo una solución que funcionará en caso de que una versión contenga más números (por ejemplo, 5.1.1.3). El componente detect-os-version también te ayudará a verificar la versión de otras plataformas, como Android, Mac, Windows, BlackBerry ...
No dude en importarlo y usarlo 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 la pregunta específica, este código debería hacerlo:
const osInfo = detectOsVersion.get();
if (osInfo.os == ''iOS'' && parseInt(osInfo.version) < 5) {
// Do something
}
Este fragmento 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. Algunas versiones de iOS tienen un tercer dígito.
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 siguiente 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 también debería responder a tu pregunta.
Tenga en cuenta lo demás porque el 1er cheque no funcionará en iOS 1. iOS 1 para iPhone e 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 sitio web de Apple aquí .
Primero: no use la match
cuando una test
sea suficiente.
Segundo: Deberías probar al revés. Encuentra los UA que se sabe que 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();
...
Realmente no pude encontrar lo que estaba buscando, así que tomé ideas de esta página y otras páginas de la red y se me ocurrió esto. Ojalá otros lo encuentren útil también.
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);
}
}
Le permite obtener el lanzamiento principal y el número de lanzamiento completo como una cadena o como un número para iOS.
Ejemplo de cadena de agente de usuario:
Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329
Uso:
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
En el caso de la pregunta original en esta página, puede usar este código de la siguiente manera:
var iOS=iOS_version();
$(document).bind("scroll", function() {
if(iOS){if(iOS.Major_Release_Numeric <5) {}
else {changeFooterPosition();}
}
});
Simplemente ejecute este código en el dispositivo / navegador
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 te dará la versión correcta del sistema operativo para cualquier dispositivo iPhone.
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];
}
Esto devolverá una matriz con los números de versión individuales como [10,0,1]
para v10.0.1, o por defecto será [0]
. Puede verificar el primer dígito (la versión principal) o todos para probar las versiones que necesita.