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;
}
Это пользовательские тесты Modernizr: https://gist.github.com/855078
Я написал это пару лет назад, но я считаю, что он все еще работает:
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;