47

これは古いバージョンの iOS での position:fixed の「修正」に関連しています。ただし、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();
    }
});
4

9 に答える 9

133

このコード スニペットを使用して、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.');
}
于 2013-01-08T21:00:19.707 に答える
11

Pumbaa80 の回答はほぼ 100% で、一部を省略しただけです。一部の 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 では機能しないため、else に注意してください。iPhone および iPod 用の iOS 1 では、UserAgent 文字列にバージョン番号が含まれていませんでした。

iPhone v1.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

これらはすべて、 Apple の Web サイトの次のリンクにあります。

于 2012-06-20T23:29:06.770 に答える
4

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.
    }
  }
于 2012-06-20T17:46:46.590 に答える
4

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 ) { ... }
于 2012-11-25T08:21:14.943 に答える
3

最初: aで十分なmatch場合は使用しないでください。test

2 番目: 逆の方法でテストする必要があります。壊れていることがわかっている UA を見つけます。

if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) {
    if (/OS [1-4]_\d like Mac OS X/i.test(navigator.userAgent)) {
        changeFooterPosition();
...
于 2011-12-01T22:52:08.107 に答える
1

デバイス/ブラウザでこのコードを実行するだけです

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 バージョンを提供します。

于 2015-09-01T11:31:44.070 に答える
0

さらにバージョン番号 ("5") を解析し、番号がバージョン番号より大きいか小さいかという条件を追加します。

于 2011-12-01T20:58:51.470 に答える