IOS erkennen
Mit iOS 13 iPad sind sowohl der User-Agent als auch die Plattform-Strings geändert und die Unterscheidung zwischen iPad und MacOS scheint möglich, daher müssen jetzt alle unten stehenden Antworten das berücksichtigen.
Das könnte die kürzeste Alternative sein, die auch iOS 13 abdeckt:
function iOS() {
return [
'iPad Simulator',
'iPhone Simulator',
'iPod Simulator',
'iPad',
'iPhone',
'iPod'
].includes(navigator.platform)
// iPad unter iOS 13 erkennen
|| (navigator.userAgent.includes("Mac") && "ontouchend" in document)
}
iOS
wird entweder true
oder false
sein
Schlechtere Option: User-Agent-Sniffing
Das User-Agent-Sniffing ist gefährlicher und es treten oft Probleme auf.
Auf dem iPad iOS 13 ist der User-Agent identisch mit dem eines MacOS 13-Computers, aber wenn Sie iPads ignorieren, könnte dies für eine Weile immer noch funktionieren:
var iOS = !window.MSStream && /iPad|iPhone|iPod/.test(navigator.userAgent); // schlägt bei iPad iOS 13 fehl
Das !window.MSStream
dient dazu, die fälschliche Erkennung von IE11 zu vermeiden, siehe hier und hier.
Hinweis: Sowohl navigator.userAgent
als auch navigator.platform
können vom Benutzer oder einer Browsererweiterung gefälscht werden.
Browsererweiterungen zum Ändern von User-Agent oder Plattform existieren, weil Websites zu stark von Erkennungsmethoden abhängen und häufig einige Funktionen deaktivieren, auch wenn der Browser des Benutzers diese Funktionen anderweitig nutzen könnte.
Zur Deeskalation dieses Konflikts mit Benutzern wird empfohlen, speziell für jeden Fall die genauen Funktionen zu erkennen, die Ihre Website benötigt. Wenn der Benutzer dann einen Browser mit der benötigten Funktion erhält, funktioniert es bereits ohne zusätzliche Codeänderungen.
iOS-Version erkennen
Die gängigste Methode zur Erkennung der iOS-Version erfolgt durch Analyse aus dem User-Agent-String. Aber es gibt auch Feature Erkennung Schlussfolgerung*;
Wir wissen, dass die history API
in iOS4 eingeführt wurde - matchMedia API
in iOS5 - webAudio API
in iOS6 - WebSpeech API
in iOS7 und so weiter.
Hinweis: Der folgende Code ist nicht zuverlässig und wird brechen, wenn eines dieser HTML5-Features in einer neueren iOS-Version veraltet wird. Sie wurden gewarnt!
function iOSversion() {
if (iOS) { // <-- Verwenden Sie den oben stehenden
if (window.indexedDB) { return 'iOS 8 und höher'; }
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 oder früher';
}
return 'Kein iOS-Gerät';
}
0 Stimmen
Siehe [Was ist die iOS 5 Benutzeroberfläche?][1] (Duplikat?). [1]: stackoverflow.com/questions/7825873/…
1 Stimmen
Ist dies eine clientseitige oder serverseitige Erkennung?
0 Stimmen
Hey @DouglasGreenshields, es ist clientseitig
1 Stimmen
Auch kein Duplikat, ich frage, wie man es macht. Ich habe noch nie User-Agent-Sniffing verwendet.
0 Stimmen
stackoverflow.com/questions/19877924/…