Wykrywanie iOS
Nie jestem fanem wąchania User User Agent, ale oto jak to zrobić:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Innym sposobem jest poleganie na navigator.platform
:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOS
będzie albo true
albofalse
Dlaczego nie MSStream
Microsoft wstrzyknął słowo iPhone do IE11 userAgent
, aby jakoś oszukać Gmaila. Dlatego musimy to wykluczyć. Więcej informacji na ten temat tutaj i tutaj .
Poniżej znajduje się aktualizacja IE11 (aktualizacja userAgent
Internet Explorer dla Windows Phone 8.1):
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) jak iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, jak Gecko) Mobile Safari / 537
Z łatwością dodawaj więcej urządzeń bez użycia wyrażeń regularnych:
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()
będzie albo true
albofalse
Uwaga: Zarówno navigator.userAgent
i navigator.platform
mogą być sfałszowane przez użytkownika lub rozszerzeniem przeglądarki.
Wykrywanie wersji iOS
Najczęstszym sposobem wykrywania wersji iOS jest parsowanie jej z ciągu Agenta użytkownika . Ale istnieje również wnioskowanie o wykrywaniu funkcji * ;
Wiemy o tym, że history API
został wprowadzony w iOS4 - matchMedia API
w iOS5 - webAudio API
w iOS6 - WebSpeech API
w iOS7 itd.
Uwaga: poniższy kod nie jest niezawodny i ulegnie awarii, jeśli którakolwiek z tych funkcji HTML5 będzie przestarzała w nowszej wersji iOS. Zostałeś ostrzeżony!
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';
}