Определить версию iOS менее 5 с помощью JavaScript

Это связано с "исправлением" позиции: исправлено в старых версиях iOS. Однако, если установлен iOS5 или выше, исправление разбивает страницу.

Я знаю, как обнаружить iOS 5: navigator.userAgent.match(/OS 5_\d like Mac OS X/i), но это не сработает для iOS6, когда это произойдет, или даже iOS 5.0.1, только в двухзначной версии.

Итак, это то, что у меня есть.

$(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();
    }
});

Ответ 1

Этот фрагмент кода может использоваться для определения любой версии 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.');
}

Ответ 2

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)? допускает возможность третьей цифры в номере версии. Чарли С, Это тоже должно ответить на ваш вопрос.

Обратите внимание на else, потому что первая проверка не будет работать на iOS 1. iOS 1 для iPhone и iPod не содержит номер версии в своей строке 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

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

Все это можно найти по следующей ссылке на сайте Яблока здесь.

Ответ 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.
    }
  }

Ответ 4

Во-первых: Не используйте match, когда достаточно test.

Второе: вы должны протестировать наоборот. Найдите УА, которые, как известно, сломаны.

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

Ответ 5

Здесь немного JS для определения версии iOS и Android OS.

Протестировано с действительными строками пользовательских агентов для 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 ) { ... }

Ответ 6

Просто запустите этот код в устройстве/браузере

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.

Ответ 7

Далее проанализируйте номер версии ( "5" ), затем добавьте условие, если число больше или меньше номера версии.

Ответ 8

Как уже упоминалось выше, версии iOS могут иметь более двух чисел. Насколько мне известно, в настоящий момент три раза больше, но у меня есть решение, которое будет работать, если версия будет содержать больше чисел (например, 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
}

Ответ 9

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] в противном случае. Вы можете проверить первую цифру (основную версию) или все из них, чтобы протестировать нужные вам версии.