Die MDN documentation besagt, dass window.navigator.userAgent veraltet ist und nicht verwendet werden sollte. Wenn ich die Browser- und BS-Daten des Benutzers für Analysen sammeln möchte (keine Feature-Erkennung), was sollte ich stattdessen verwenden?Wenn window.navigator.userAgent veraltet ist, was sollte ich stattdessen verwenden?
Antwort
Die User-Agent-Zeichenfolge wird bedeutungslos und äußerst unzuverlässig.
Sie sollten keine User Agent-Zeichenfolge verwenden, stattdessen sollten Sie Feature-Erkennung verwenden. Wenn Sie Feature X verwenden müssen, testen Sie, ob X verfügbar ist.
Aber auch um Ihre Frage direkt zu beantworten, gibt es keine JS Alternative.
Browser-Identifikation, basierend auf den Benutzer-Agent-String Detektieren unzuverlässig und nicht zu empfehlen, da die Zeichenfolge User Agent Benutzer konfigurierbar ist.
Zum Beispiel:
- In Firefox können Sie die Präferenz general.useragent.override in etwa ändern: config. Einige Firefox-Erweiterungen tun das; Dies ändert jedoch nur den HTTP-Header, der gesendet wird, und hat keinen Einfluss auf die Browsererkennung durch JavaScript-Code.
- Opera 6+ ermöglicht es Benutzern, den Browser Identifizierungs-String über ein Menü
- Microsoft Internet Explorer verwendet die Windows-Registry
- Safari und iCab einstellen können Benutzer den Browser-User-Agent Zeichenfolge ändern Internet Explorer oder Netscape Strings vordefiniert über ein Menü.
Ich denke, dass sie versuchen vollständig diese Funktion von JavaScript zu entfernen.
Update:
Object-Oriented JavaScript, 2nd Edition: Es ist besser, nicht auf den User-Agent-String zu verlassen, sondern Funktion nutzen zu können Sniffing statt (auch Fähigkeit Erkennung genannt). Der Grund dafür ist, dass es schwer ist alle Browser und ihre verschiedenen Versionen zu verfolgen. Es ist viel einfacher, einfach zu überprüfen, ob die Funktion, die Sie verwenden möchten, in der Tat im Browser des Benutzers verfügbar ist. Zum Beispiel hat einen Blick auf den folgenden Code:
if (typeof window.addEventListener === 'function') { // feature is supported, let's use it } else { // hmm, this feature is not supported, will have to // think of another way }
- 1. CookieSyncManager ist jetzt veraltet, was kann ich stattdessen verwenden?
- 2. httpClient.getConnectionManager() ist veraltet - was sollte stattdessen verwendet werden?
- 3. Wird window.navigator.userAgent wirklich veraltet sein?
- 4. Ist ExAllocatePool veraltet? Was nützt es stattdessen?
- 5. HTML-Attribut bgcolor ist veraltet: Was stattdessen verwenden?
- 6. GKSession ist in iOS7 veraltet, was sollte ich jetzt verwenden?
- 7. OS X 10.5 SDK veraltet getAttributeNS; Was sollte ich stattdessen verwenden?
- 8. Jetzt, wo der Controller veraltet ist, was verwende ich stattdessen?
- 9. UIBarButtonItemStyleBordered ist veraltet; Was soll ich stattdessen tun?
- 10. GLSL - texture1D ist veraltet, was soll stattdessen verwendet werden?
- 11. Erweiterung kann nicht erweitert werden; Was sollte ich stattdessen verwenden?
- 12. TWRequest ist in iOS 6.0 veraltet - was kann ich stattdessen verwenden?
- 13. Fehler $ HTTP_RAW_POST_DATA ist veraltet, verwenden Sie stattdessen den php: // - Eingabestream. "
- 14. CGContextShowTextAtPoint veraltet - was soll ich jetzt verwenden?
- 15. Umgang mit "SubfieldBase ist veraltet. Verwenden Sie stattdessen Field.from_db_value."
- 16. Warum ist es nicht ratsam, attach() in R zu verwenden, und was sollte ich stattdessen verwenden?
- 17. Warnung: [Verlauf] pushState ist veraltet; verwenden schieben stattdessen
- 18. Ist Float.equals (fast) völlig unbrauchbar und was sollte ich stattdessen verwenden?
- 19. Eval ist böse ... Was soll ich stattdessen verwenden?
- 20. Groovy String.toURL ist veraltet - warum und was sollten wir stattdessen verwenden?
- 21. Ist XmlReader.ReadString veraltet oder veraltet?
- 22. Warum ist OnClosing veraltet und sollte ich wandern zu OnFormClosing
- 23. Heroku-Protokoll Warnung "(Knoten) sys ist veraltet. Verwenden Sie util stattdessen" wenn Skript läuft
- 24. Verwendung von getPreventDefault() ist veraltet. Verwenden Sie stattdessen defaultPrevented. Warum bekomme ich diesen Fehler und was ist die Lösung dafür?
- 25. Angular2 die Funktion provide() in RC4 und später veraltet, was sollte stattdessen verwendet werden?
- 26. Was sollte ich "htonl" verwenden?
- 27. TThread.resume ist in Delphi-2010 veraltet, was sollte verwendet werden?
- 28. Sollte ich bestehenden Magento CSS anpassen oder ich sollte Bootstrap und verwenden Sie stattdessen
- 29. Wenn ich einen Gegenstand brauche, sollte ich stattdessen seine "int id" verwenden?
- 30. com.sun.faces.enableRestoreView11Kompatibilität was stattdessen in JSF 1.2 verwenden
Modernisierer bereits verwendet Feature-Erkennung. Zum Beispiel: https://github.com/Modernizr/Modernizr/blob/master/src/prefixedCSSValue.js – Quentin
Ja, Sie haben Recht –
Wie Feature-Detect für die Notwendigkeit, um einen Rendering-Fehler zu arbeiten? – Jules