使用 JavaScript 检测低于 5 的 iOS 版本
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8348139/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Detect iOS version less than 5 with JavaScript
提问by absynthe minded web smith
This is related to the "fix" for position:fixed in older versions of iOS. However, if iOS5 or greater is installed, the fix breaks the page.
这与 position:fixed 在旧版本的 iOS 中的“修复”有关。但是,如果安装了 iOS5 或更高版本,修复程序会破坏页面。
I know howto detect iOS 5: navigator.userAgent.match(/OS 5_\d like Mac OS X/i)
but that won't work for iOS6 when it eventually comes around, or even iOS 5.0.1, only a 2 digit version.
我知道如何检测 iOS 5:navigator.userAgent.match(/OS 5_\d like Mac OS X/i)
但是当它最终出现时,这不适用于 iOS6,甚至 iOS 5.0.1,只有 2 位数字版本。
So this is what I have atm.
所以这就是我拥有的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();
}
});
回答by Peter T Bosse II
This snippet of code can be used to determine any version of iOS 2.0 and later.
这段代码可用于确定 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.');
}
回答by JDubDev
Pumbaa80's Answer was almost 100%, he just left out one part. Some iOS release have a third digit on them.
Pumbaa80 的回答几乎是 100%,他只是遗漏了一部分。某些 iOS 版本上有第三个数字。
Example
例子
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en_us) AppleWebKit/525.18.1 (KHTML, like Gecko)
The follow allows for that
以下允许
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
}
}
That extra bit (_\d)? allows for the possibility of a third digit in the Version number. Charlie S, That should answer your question too.
那个额外的位(_\d)?允许版本号中有第三位数字的可能性。Charlie S,那也应该回答你的问题。
Note the else because the 1st check won't work on iOS 1. iOS 1 for the iPhone and iPod didn't include a version number in its UserAgent string.
请注意 else 因为第一次检查在 iOS 1 上不起作用。用于 iPhone 和 iPod 的 iOS 1 没有在其 UserAgent 字符串中包含版本号。
iPhone v 1.0
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
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
All of this can be found at the following link on Apples website here.
回答by Charlie Schliesser
Adding on to Pumbaa80's answer. The version string might be 4_0
, 5_0_1
, 4_0_4
, etc., and so testing against [1-4]_/d
(a single underscore and number) isn't adequate. The JavaScript below is working for me for various sub-versions of iOS 3-5:
添加到 Pumbaa80 的答案。版本字符串可能是4_0
、5_0_1
、4_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.
}
}
回答by user123444555621
First: Don't use match
when a test
is enough.
第一:match
当 atest
足够时不要使用。
Second: You should test the other way round. Find the UAs which are known to be broken.
第二:你应该反过来测试。找出已知被破坏的 UA。
if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) {
if (/OS [1-4]_\d like Mac OS X/i.test(navigator.userAgent)) {
changeFooterPosition();
...
回答by Jim Bergman
Here's a bit of JS to determine iOS and Android OS version.
这里有一些 JS 来确定 iOS 和 Android 操作系统版本。
Tested with actual user agent strings for iOS 4.3 to 6.0.1, and Android 2.3.4 to 4.2
使用 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';
}
}
Then to detect a specific version and higher, try:
然后要检测特定版本及更高版本,请尝试:
if ( userOS === 'iOS' && Number( userOSver.charAt(0) ) >= 5 ) { ... }
回答by Joshua A
I could not really find what I was looking for, so I took ideas from this page and other pages around the net and came up with this. Hopefully others will find it useful as well.
我真的找不到我要找的东西,所以我从这个页面和网络上的其他页面中汲取了想法,然后想出了这个。希望其他人也会发现它很有用。
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);
}
}
It allows you to get the major release and full release number either as a string or as a number for iOS.
它允许您以字符串或 iOS 数字的形式获取主要版本和完整版本号。
Example User Agent String:
示例用户代理字符串:
Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329
Usage:
用法:
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
In the case of the original question on this page, you could use this code in the following manner:
对于此页面上的原始问题,您可以按以下方式使用此代码:
var iOS=iOS_version();
$(document).bind("scroll", function() {
if(iOS){if(iOS.Major_Release_Numeric <5) {}
else {changeFooterPosition();}
}
});
回答by maSC0d3R
Just simply run this code in device/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!');
}
}
This iphone_version variable will give you correct OS version for any iPhone device.
这个 iphone_version 变量将为您提供任何 iPhone 设备的正确操作系统版本。
回答by Mani Gandham
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];
}
This will return an array with the individual version numbers like [10,0,1]
for v10.0.1, or it'll default to [0]
otherwise. You can check the first digit (the major version) or all of them to test for the versions you need.
这将返回一个包含各个版本号的数组,例如[10,0,1]
v10.0.1,否则将默认为[0]
其他版本。您可以检查第一个数字(主要版本)或所有数字来测试您需要的版本。
回答by Joshua
Further parse out the version number ("5"), then add a condition where if number is greater than / less than version number.
进一步解析出版本号(“5”),然后添加一个条件 if number 大于/小于版本号。