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

这与位置的“修复”有关:在旧版本的iOS中修复。 但是,如果安装了iOS5或更高版本,修补程序会中断该页面。

我知道如何检测iOS 5: navigator.userAgent.match(/OS 5_\d like Mac OS X/i) 5 navigator.userAgent.match(/OS 5_\d like Mac OS X/i)但不会为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(); } }); 

这段代码可以用来确定任何版本的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.'); } 

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)? 允许版本号中有第三位的可能性。 查理S,那也应该回答你的问题。

请注意其他问题,因为第一次检查不适用于iOS 1. iPhone和iPod的iOS 1在其UserAgentstring中不包含版本号。

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 

所有这些可以在苹果网站上的以下链接中find 。

加上Pumbaa80的答案。 版本string可能是4_0等,因此对[1-4]_/d (单个下划线和数字)进行testing是不够的。 下面的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. } } 

首先: test足够时不要使用match

第二:你应该反过来testing。 find已知被破坏的UA。

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

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

使用iOS 4.3至6.0.1和Android 2.3.4至4.2的实际用户代理string进行testing

 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 ) { ... } 

只需在设备/浏览器中运行此代码

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

这个iphone_versionvariables会给你任何iPhone设备的正确操作系统版本。

正如这里已经提到的,iOS版本可以有两个以上的数字。 据我所知目前最多只有三个,但是我有一个解决scheme可以在一个版本包含更多数字的情况下工作(例如5.1.1.3)。 detect-os-version组件还将帮助您检查其他平台的版本,例如Android,Mac,Windows,BlackBerry …

随意导入它并使用如下例所示:

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

要回答具体的问题,这段代码应该这样做:

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

进一步parsing版本号(“5”),然后添加一个条件,如果数字大于/小于版本号。