javascript - проверка - navigator useragent indexof ios




Обнаружение, если устройство iOS (8)

Обнаружение iOS

Я не поклонник обмана пользователя, но вот как вы это сделаете:

var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

Другой способ - использовать navigator.platform :

var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);

iOS будет либо true либо false

Почему не MSStream

Microsoft ввела слово iPhone в userAgent IE11, чтобы попытаться как-то обмануть Gmail. Поэтому нам нужно его исключить. Подробнее об этом here и here .

Ниже приведен обновленный пользовательский интерфейс IE11 (Internet Explorer для Windows Phone 8.1 Update):

Mozilla / 5.0 (Mobile, Windows Phone 8.1, Android 4.0, ARM, Trident / 7.0, Touch, rv: 11.0, IEMobile / 11.0, NOKIA, Lumia 930), как iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, как и Gecko) Мобильный Safari / 537

Легко добавлять дополнительные устройства, не используя регулярные выражения:

function iOS() {

  var iDevices = [
    'iPad Simulator',
    'iPhone Simulator',
    'iPod Simulator',
    'iPad',
    'iPhone',
    'iPod'
  ];

  if (!!navigator.platform) {
    while (iDevices.length) {
      if (navigator.platform === iDevices.pop()){ return true; }
    }
  }

  return false;
}

iOS() будет либо true либо false

Примечание. Как navigator.userAgent и navigator.platform могут быть подделаны пользователем или расширением браузера.

Обнаружение версии iOS

Самый распространенный способ обнаружения версии iOS - это разбор его из строки User Agent . Но есть также функция обнаружения вывода * ;

Мы знаем, что history API был введен в iOS4 - matchMedia API в iOS5 - webAudio API в iOS6 - WebSpeech API WebSpeech в iOS7 и т. Д.

Примечание . Следующий код не является надежным и прерывается, если какая-либо из этих функций HTML5 устарела в новой версии iOS. Вы были предупреждены!

function iOSversion() {

  if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
    if (!!window.indexedDB) { return 'iOS 8 and up'; }
    if (!!window.SpeechSynthesisUtterance) { return 'iOS 7'; }
    if (!!window.webkitAudioContext) { return 'iOS 6'; }
    if (!!window.matchMedia) { return 'iOS 5'; }
    if (!!window.history && 'pushState' in window.history) { return 'iOS 4'; }
    return 'iOS 3 or earlier';
  }

  return 'Not an iOS device';
}

Мне интересно, можно ли определить, работает ли браузер на iOS, подобно тому, как вы можете обнаружить обнаружение с помощью Modernizr (хотя это, очевидно, обнаружение устройства, а не обнаружение функции).

Обычно я предпочитаю обнаружение функции, но мне нужно выяснить, является ли устройство iOS из-за того, как они обрабатывают видео по этому вопросу. API YouTube не работает с устройством iPad / iPhone / non-Flash


Если вы используете Modernizr , вы можете добавить для него собственный тест.

Не имеет значения, какой режим обнаружения вы решите использовать (userAgent, navigator.vendor или navigator.platform), вы всегда можете его обернуть для более легкого использования позже.

//Add Modernizr test
Modernizr.addTest('isios', function() {
    return navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
});

//usage
if (Modernizr.isios) {
    //this adds ios class to body
    Modernizr.prefixed('ios');
} else {
    //this adds notios class to body
    Modernizr.prefixed('notios');
}

По возможности при добавлении тестов Modernizr вы должны добавить тест для функции, а не устройства или операционной системы. Нет ничего плохого в том, чтобы добавить десять тестов для тестирования iPhone, если это нужно. Некоторые вещи просто не могут быть обнаружены.

    Modernizr.addTest('inpagevideo', function ()
    {
        return navigator.userAgent.match(/(iPhone|iPod)/g) ? false : true;
    });

Например, на iPhone (а не на iPad) видео нельзя воспроизвести встроенным на веб-странице, оно открывается во весь экран. Поэтому я создал тест «no-inpage-video»,

Затем вы можете использовать это в css (Modernizr добавляет класс .no-inpagevideo к .no-inpagevideo <html> если тест .no-inpagevideo с ошибкой)

.no-inpagevideo video.product-video 
{
     display: none;
}

Это скроет видео на iPhone (то, что я на самом деле делаю в этом случае, показывает альтернативное изображение с onclick, чтобы воспроизвести видео - я просто не хочу, чтобы показывал видео плеер и кнопка воспроизведения по умолчанию).


Пользовательские агенты на устройствах iOS говорят в них iPhone или iPad. Я просто фильтрую на основе этих ключевых слов.


Чтобы обнаружить версию iOS, необходимо разрушить пользовательский агент с помощью кода Javascript, например:

 var res = navigator.userAgent.match(/; CPU.*OS (\d_\d)/);
    if(res) {
        var strVer = res[res.length-1];
        strVer = strVer.replace("_", ".");
        version = strVer * 1;
    }


Я написал это пару лет назад, но я считаю, что он все еще работает:

if(navigator.vendor != null && navigator.vendor.match(/Apple Computer, Inc./) && navigator.userAgent.match(/iPhone/i) || (navigator.userAgent.match(/iPod/i))) 

    {

        alert("Ipod or Iphone");

    }

else if (navigator.vendor != null && navigator.vendor.match(/Apple Computer, Inc./) && navigator.userAgent.match(/iPad/i))  

    {

        alert("Ipad");

    }

else if (navigator.vendor != null && navigator.vendor.match(/Apple Computer, Inc./) && navigator.userAgent.indexOf('Safari') != -1)

    {

        alert("Safari");

    }

else if (navigator.vendor == null || navigator.vendor != null)

    {

        alert("Not Apple Based Browser");

    }

var isiOSSafari = (navigator.userAgent.match(/like Mac OS X/i)) ? true: false;







browser-feature-detection