Phát hiện iOS
Tôi không phải là người hâm mộ của Tác nhân người dùng đánh hơi, nhưng đây là cách bạn sẽ làm điều đó:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Một cách khác là dựa vào navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
sẽ là một trong hai true
hoặcfalse
Tại sao không phải là MSStream
Microsoft đã chèn từ iPhone vào IE11 userAgent
để thử và đánh lừa Gmail bằng cách nào đó. Vì vậy, chúng ta cần loại trừ nó. Thông tin thêm về điều này ở đây và ở đây .
Dưới đây là bản cập nhật của IE11 userAgent
(Bản cập nhật Internet Explorer cho Windows Phone 8.1):
Mozilla / 5.0 (Di động; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv: 11.0; IEMobile / 11.0; Nokia; Lumia 930) như iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, như Gecko) Safari di động / 537
Dễ dàng thêm nhiều thiết bị hơn mà không cần sử dụng Biểu thức thông thường:
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()
sẽ là một trong hai true
hoặcfalse
Lưu ý: Cả hai navigator.userAgent
và navigator.platform
có thể được làm giả bởi người dùng hoặc tiện ích mở rộng trình duyệt.
Phát hiện phiên bản iOS
Cách phổ biến nhất để phát hiện phiên bản iOS là phân tích cú pháp từ chuỗi Tác nhân người dùng . Nhưng cũng có suy luận phát hiện tính năng * ;
Chúng tôi biết một thực tế history API
đã được giới thiệu trong iOS4 - matchMedia API
trong iOS5 - webAudio API
trong iOS6 - WebSpeech API
trong iOS7 và v.v.
Lưu ý: Đoạn mã sau không đáng tin cậy và sẽ bị hỏng nếu bất kỳ tính năng HTML5 nào bị phản đối trong phiên bản iOS mới hơn. Bạn đã được cảnh báo!
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';
}