Виявлення iOS
Я не прихильник нюхання агента User Agent, але ось як би ви це зробили:
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 в IE11, userAgent
щоб якось спробувати обдурити Gmail. Тому нам потрібно виключити це. Більше інформації про це тут і тут .
Нижче оновлено IE11 (оновлення userAgent
Internet Explorer для Windows Phone 8.1):
Mozilla / 5.0 (мобільний; 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) Мобільний сафарі / 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
в 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';
}