Wenn Sie immer noch versuchen zu überprüfen, ob es sich um iOS handelt oder nicht, empfehle ich Ihnen, diesen Ansatz zu verwenden:
- Erstellen Sie einen Ordner namens
helper
- Erstellen Sie eine Datei namens
platform.ts
oder platform.js
-
Exportieren Sie die Funktion isIOS
:
export const isIOS = () => {
let platform = navigator?.userAgent || navigator?.platform || 'unknown'
return /iPhone|iPod|iPad/.test(platform)
}
Das Ergebnis wird true
sein, wenn es sich um ein iPhone
oder iPod
oder Ipad
handelt, oder andernfalls wird es false
sein.
Sie könnten fragen, warum ich navigator.userAgent || navigator.platform
überprüfen muss, nun der Grund ist einfach, die zweite Option war früher die Standardoption, aber jetzt ist sie veraltet und einige Browser werden dies in Zukunft nicht mehr unterstützen, die erste ist zuverlässiger.
Sie können hier über die oben erwähnte Veraltetheit nachlesen:
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#:~:text=Deprecated%3A%20This%20feature%20is%20no,be%20kept%20for%20compatibility%20purposes.
Protokollieren der userAgentData
, userAgent
und platform
.
Mit der folgenden Funktion habe ich diese Protokolle erhalten:
console.log({
userAgentData: navigator?.userAgentData?.platform,
userAgent: navigator?.userAgent,
platform: navigator?.platform,
})
{
"userAgentData": "",
"userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
"platform": "MacIntel"
}
Ich habe es auf meinem Macbook getestet und es hat auf verschiedenen Browsern und Betriebssystemen funktioniert. Wie Sie sehen können, wird navigator?.userAgentData?.platform
überhaupt nicht funktionieren.
Ich habe auch keine Fehler in Bezug auf meinen TypeScript erhalten, obwohl ich React verwende, um diese Funktion aufzurufen.
Bonus, isAndroid
Wenn Sie sich fragen, wie Sie überprüfen können, ob es sich um eine Android-Plattform handelt, schlage ich vor, nicht der Idee zu folgen, das Gegenteil von isIOS
zu tun, wie:
const isAndroid = !isIOS();
Der Grund ist recht einfach, es wird nicht funktionieren, da Desktops als Android-Plattform erkannt werden. Um dieses Problem zu lösen, müssen Sie diese Überprüfung durchführen:
export const isAndroid = () => {
const ua = navigator.userAgent.toLowerCase() + navigator?.platform.toLowerCase();
const isAndroid = ua.indexOf("android") > -1;
return isAndroid;
}
Der Grund, warum wir navigator.userAgent
plus navigator?.platform
überprüfen, ist, um alte Browser und die neuen zu unterstützen.
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/…