กำลังตรวจจับ 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 Update):
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) มือถือ 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 ของคุณคือการแยกจากสตริงตัวแทนผู้ใช้ แต่ยังมีการอนุมานการตรวจจับคุณสมบัติ* ;
เรารู้ถึงข้อเท็จจริงที่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';
}