W obiekcie MDN documentation podano, że window.navigator.userAgent jest przestarzałe i nie należy go używać. Jeśli chcę zebrać przeglądarkę użytkownika i dane o osobie do analizy (nie wykrywanie funkcji), co powinienem zamiast tego użyć?Jeśli window.navigator.userAgent jest przestarzałe, co powinienem użyć zamiast tego?
Odpowiedz
Łańcuch agenta użytkownika staje się bezsensowny i wyjątkowo zawodny.
Nie należy używać łańcucha agenta użytkownika, należy raczej użyć funkcji wykrywania . Jeśli potrzebujesz skorzystać z funkcji X, sprawdź, czy X jest dostępny.
Ale aby odpowiedzieć bezpośrednio na twoje pytanie, nie ma alternatywnego JS.
identyfikacja Przeglądarka oparta na wykrywaniu ciąg agenta użytkownika jest zawodne i nie jest zalecane, ponieważ ciąg agenta użytkownika jest użytkownik konfigurowalne.
Na przykład:
- W Firefoksie można zmienić preferencje general.useragent.override w about: config. Niektóre rozszerzenia przeglądarki Firefox mają wartość ; zmienia to jednak tylko nagłówek HTTP, który zostanie wysłany, a nie wpływa na wykrywanie przeglądarki wykonywane przez kod JavaScript.
- Opera 6+ pozwala użytkownikom ustawić ciąg identyfikacyjny przeglądarka poprzez menu
- Microsoft Internet Explorer wykorzystuje rejestr Windows
- Safari i iCab umożliwić użytkownikom zmianę agenta użytkownika przeglądarce ciąg predefiniowane Internet Explorer lub Netscape ciągi za pośrednictwem menu .
myślę, że starają usunąć całkowicie tę funkcję z JavaScript.
Aktualizacja:
Object-Oriented JavaScript, 2nd Edition: To lepiej nie polegać na ciąg agenta użytkownika, ale w użyciu funkcji wąchania (zwany również wykrywanie możliwości) zamiast. Powodem tego jest to, że trudno jest śledzić wszystkie przeglądarki i ich różne wersje pod numerem . Znacznie łatwiej jest po prostu sprawdzić, czy funkcja, którą zamierzamy użyć, jest rzeczywiście dostępna w przeglądarce użytkownika pod adresem . Na przykład spojrzeć na następującego kodu:
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. GLSL - texture1D jest przestarzałe, co należy zamiast tego użyć?
- 2. Arguments.callee jest przestarzałe - co należy zamiast tego użyć?
- 3. CookieSyncManager jest teraz przestarzałe, co mogę zamiast tego użyć?
- 4. node.js fs.exists() będzie przestarzałe, co należy zamiast tego użyć?
- 5. Co powinienem użyć zamiast sscanf?
- 6. Co powinienem użyć zamiast com.google.appengine.repackaged *?
- 7. Nie można rozszerzyć wyliczenia; co powinienem zamiast tego użyć?
- 8. TWRequest jest przestarzałe w iOS 6.0 - co mogę zamiast tego użyć?
- 9. "WebSocket.URL" jest przestarzałe. Proszę użyć "WebSocket.url" zamiast
- 10. "eval" jest przestarzałe. Proszę użyć „oceniać” zamiast
- 11. Co powinienem użyć zamiast printf w Perlu?
- 12. CGContextShowTextAtPoint przestarzałe - co mam teraz użyć?
- 13. sharedDispatcher brakuje w CCTouchDispatcher (Cocos2D 2.0 beta2), co powinienem zamiast tego użyć?
- 14. disconnect() jest przestarzałe: Proszę użyć właściwości shouldEstablishDirectChannel zamiast
- 15. Dlaczego nie zaleca się używania metody attach() w wersji R i co powinienem zamiast tego użyć?
- 16. Scala 2.11 LinkedList jest przestarzała, co powinienem użyć?
- 17. Zdarzenie jQuery .toggle przestarzałe, co należy użyć?
- 18. C# Rejestrowanie. Co powinienem użyć?
- 19. Co możemy użyć zamiast nstimer?
- 20. Co to jest bajt datatype i kiedy powinienem go użyć?
- 21. controlsfx Dialogs przestarzałe za co?
- 22. Czy window.navigator.userAgent naprawdę będzie przestarzały?
- 23. Czy auto_ptr jest przestarzałe?
- 24. Co powinienem użyć uśpienia lub czasomierza
- 25. GKSession jest przestarzały w ios7, co powinienem teraz użyć?
- 26. Czy powinienem przestać używać abstrakcyjnych klas bazowych/interfejsów i zamiast tego użyć funkcji boost :: function/std ::?
- 27. Kiedy potrzebuję jakiegoś przedmiotu, powinienem zamiast tego użyć jego "int id"?
- 28. W Androidzie, dlaczego wszystkie klasy org.apache.http. * Są przestarzałe w API 22 (i co powinienem użyć jako zamienniki)?
- 29. Filtry widoczności i filtry kolekcji są przestarzałe, co należy zamiast tego stosować?
- 30. WakefulBroadcastReceiver jest przestarzałe
modernizatora już wykorzystuje detekcję funkcji. Na przykład: https://github.com/Modernizr/Modernizr/blob/master/src/prefixedCSSValue.js – Quentin
Tak, masz rację: –
Jak wykrywasz funkcję, aby obejść błąd renderowania? – Jules