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

abs*_*ith 42 javascript version-detection ios

这与位置的"修复"有关:在旧版本的iOS中修复.但是,如果安装了iOS5或更高版本,则修复程序会破坏页面.

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

所以这就是我的主题.

$(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();
    }
});
Run Code Online (Sandbox Code Playgroud)

小智 119

此代码段可用于确定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.');
}
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,iPod touch实际上从`navigator.platform`返回"iPod touch",所以我也使用_RegExp_`/iP(磨损触摸|广告)/`来捕获它. (3认同)
  • Chrome也是如此:(我建议在if语句后添加``return -1`` (2认同)

小智 11

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)
Run Code Online (Sandbox Code Playgroud)

以下允许这样做

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
    }
}
Run Code Online (Sandbox Code Playgroud)

额外的一点(_\d)?允许版本号中第三个数字的可能性.查理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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

所有这一切都可以在苹果网站上的以下链接中找到.


小智 6

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

它允许您以字符串或 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
Run Code Online (Sandbox Code Playgroud)

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

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