JavaScriptでiOSバージョンを5未満で検出します
-
27-10-2019 - |
質問
これは、ポジションの「修正」に関連しています。これは、iOSの古いバージョンで修正されています。ただし、iOS5以上がインストールされている場合、修正はページを破壊します。
知っている どうやって iOS5を検出するには: 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();
}
});
解決
このコードのスニペットは、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%でしたが、彼は1つの部分を除外しました。一部のiOSリリースには、3番目の数字があります。
例
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)?バージョン番号の3番目の桁の可能性を可能にします。チャーリーS、それもあなたの質問に答えるべきです。
最初のチェックはiOS 1で動作しないため、IOS 1ではiOS 1とiPodがユーザーエージェント文字列にバージョン番号が含まれていなかったために注意してください。
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
これはすべて、次のリンクにあります リンゴのウェブサイトはこちら.
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.
}
}
最初:使用しないでください match
a test
十分です。
2番目:逆の方法をテストする必要があります。壊れていることが知られているUASを見つけます。
if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) {
if (/OS [1-4]_\d like Mac OS X/i.test(navigator.userAgent)) {
changeFooterPosition();
...
iOSおよびAndroid OSバージョンを決定するためのJSの少しを次に示します。
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 ) { ... }
私は探していたものを本当に見つけることができなかったので、このページやネットの周りの他のページからアイデアを取り、これを思いつきました。うまくいけば、他の人もそれが便利だと思うでしょう。
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 like Mac OS X) AppleWebKit/536.26 (KHTML, like 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();}
}
});
このコードをデバイス/ブラウザで実行するだけです
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_version変数は、任意のiPhoneデバイスの正しいOSバージョンを提供します。
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];
}
これにより、の個々のバージョン番号が付いた配列が返されます [10,0,1]
v10.0.1の場合、またはデフォルトになります [0]
それ以外は。最初の数字(メジャーバージョン)またはそれらすべてを確認して、必要なバージョンをテストできます。
バージョン番号( "5")をさらに解析し、数値がバージョン番号よりも大きい場合の条件を追加します。