使用 JavaScript 检测低于 5 的 iOS 版本

IT技术 javascript ios version-detection
2021-01-21 15:39:01

这与 position:fixed 在旧版本的 iOS 中的“修复”有关。但是,如果安装了 iOS5 或更高版本,此修复程序会破坏页面。

我知道如何检测 iOS 5:navigator.userAgent.match(/OS 5_\d like Mac OS X/i)但是当它最终出现时,这不适用于 iOS6,甚至 iOS 5.0.1,只有 2 位数字版本。

所以这就是我拥有的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();
    }
});
6个回答

这段代码可用于确定 iOS 2.0 及更高版本的任何版本。

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.');
}
Chrome 也为此提供了 true :( 我建议return -1在 if 语句之后添加
2021-03-16 15:39:01
感谢您提出此解决方案!我唯一要改变的是:gist.github.com/rafaelrinaldi/5873671 这样我就可以进行实际的数字比较,而不是检查结果的第一个索引的字符串值。
2021-03-26 15:39:01
真的很有帮助。多年来,我一直在寻找这个错误及其原因。谢谢!
2021-04-01 15:39:01
你知道这会在安卓设备上返回什么吗?我刚刚添加了'else return null',所以希望这可以表示非ios设备
2021-04-03 15:39:01
根据我的经验,iPod touch 实际上从 返回“iPod touch” navigator.platform,所以我也使用RegExp /iP(hone|od touch|ad)/来捕捉它。
2021-04-04 15:39:01

Pumbaa80 的回答几乎是 100%,他只是遗漏了一部分。某些 iOS 版本上有第三位数字。

例子

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

以下允许

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

那个额外的位(_\d)?允许版本号中有第三位数字的可能性。Charlie S,这也应该回答你的问题。

请注意 else 因为第一次检查在 iOS 1 上不起作用。用于 iPhone 和 iPod 的 iOS 1 没有在其 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

所有这些都可以在Apples 网站上的以下链接中找到

无论如何我只能获得 8.1.1 到 8.2 之间的 iOS 版本,如果我们测试 iOS 版本之间的范围会很有帮助
2021-03-20 15:39:01
Apple 网站的链接已失效。
2021-04-08 15:39:01

我真的找不到我要找的东西,所以我从这个页面和网络上的其他页面中汲取了一些想法,然后想出了这个。希望其他人也会发现它很有用。

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

它允许您以字符串或 iOS 数字的形式获取主要版本和完整版本号。

示例用户代理字符串:

    Mozilla/5.0(iPhone;CPU iPhone OS 6_1_3,如 Mac OS X)AppleWebKit/536.26(KHTML,如 Gecko)Mobile/10B329

用法:

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

对于此页面上的原始问题,您可以按以下方式使用此代码:

var iOS=iOS_version();
$(document).bind("scroll", function() {
    if(iOS){if(iOS.Major_Release_Numeric <5) {} 
    else {changeFooterPosition();}
    }
});   

添加到 Pumbaa80 的答案。版本字符串可能是4_05_0_14_0_4等,因此针对[1-4]_/d(单个下划线和数字)进行测试是不够的。下面的 JavaScript 适用于 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.
    }
  }

这里有一些 JS 来确定 iOS 和 Android 操作系统版本。

使用 iOS 4.3 到 6.0.1 和 Android 2.3.4 到 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';
  }
}

然后要检测特定版本及更高版本,请尝试:

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