Ich habe 5 Addons / Erweiterungen für FF, Chrome, IE, Opera und Safari.
Wie kann ich den Benutzerbrowser erkennen und umleiten (sobald auf eine Installationsschaltfläche geklickt wurde), um das entsprechende Addon herunterzuladen?
javascript
browser-detection
FrankC
quelle
quelle
Antworten:
Wenn Sie nach einer zuverlässigen Browsererkennung suchen, wird häufig die Zeichenfolge des Benutzeragenten überprüft. Diese Methode ist nicht zuverlässig, da es trivial ist, diesen Wert zu fälschen.
Ich habe eine Methode geschrieben, um Browser durch Eingabe von Enten zu erkennen .
Verwenden Sie die Browsererkennungsmethode nur, wenn dies wirklich erforderlich ist, z. B. das Anzeigen von browserspezifischen Anweisungen zum Installieren einer Erweiterung. Verwenden Sie nach Möglichkeit die Funktionserkennung.
Demo: https://jsfiddle.net/6spj1059/
Analyse der Zuverlässigkeit
Die vorherige Methode hing von den Eigenschaften der Rendering-Engine (
-moz-box-sizing
und-webkit-transform
) ab, um den Browser zu erkennen. Diese Präfixe werden irgendwann gelöscht. Um die Erkennung noch robuster zu gestalten, habe ich auf browserspezifische Merkmale umgestellt:document.documentMode
.StyleMedia
Konstruktor verfügbar . Ohne Trident bleiben wir bei Edge.InstallTrigger
chrome
Objekt, das mehrere Eigenschaften enthält, einschließlich eines dokumentiertenchrome.webstore
Objekts.chrome.webstore
ist veraltet und in neueren Versionen nicht definiertSafariRemoteNotification
, was nach Version 7.1 eingeführt wurde, um alle Safaris ab 3.0 abzudecken.window.opera
existiert seit Jahren, wird jedoch gelöscht, wenn Opera seine Engine durch Blink + V8 (von Chromium verwendet) ersetzt.chrome
Objekt definiert (aberchrome.webstore
nicht). Da Opera sich bemüht, Chrome zu klonen, verwende ich zu diesem Zweck das Sniffing von Benutzeragenten.!!window.opr && opr.addons
Kann verwendet werden, um Opera 20+ (immergrün) zu erkennen .CSS.supports()
wurde in Blink eingeführt, als Google Chrome 28 einschaltete. Es ist natürlich das gleiche Blink, das in Opera verwendet wurde.Erfolgreich getestet in:
quelle
window.chrome.webstore
definiert ist. Ich habe es nicht mit Firefox-Erweiterungen überprüft.is.js
An anderer Stelle erwähnt funktioniert dies sowohl in Chrome- als auch in Firefox-Erweiterungen.isSafari
funktioniert nicht mit Safari 10. Ich werde argumentieren, dass dies eine schlechte Lösung ist (nicht, dass ich eine gute habe). Es gibt keine Garantie dafür, dass viele der Dinge, nach denen Sie suchen, nicht entfernt oder von anderen Browsern nicht hinzugefügt werden. Jede Site, die diesen Code zur Überprüfung auf Safari verwendete, brach gerade mit den Upgrades von macOS Sierra oder Safari 10 :(isSafari
funktioniert nicht<iframe>
unter Safari 10.1.2Sie können versuchen, die Browserversion auf folgende Weise zu überprüfen.
Und wenn Sie nur die IE-Browser-Version kennen müssen, können Sie dem folgenden Code folgen. Dieser Code funktioniert gut für die Versionen IE6 bis IE11
quelle
chrome
Schlüsselwort im Useragent hat. Beispiel für Safari Useragent -mozilla/5.0 (macintosh; intel mac os x 10_11_5) applewebkit/601.6.17 (khtml, like gecko) version/9.1.1 safari/601.6.17
if(navigator.userAgent.indexOf("Opera") != -1 || navigator.userAgent.indexOf('OPR') != -1 )
Ich weiß, dass es vielleicht übertrieben ist, eine Bibliothek dafür zu verwenden, aber nur um den Thread anzureichern, können Sie die Vorgehensweise von is.j überprüfen :
quelle
is.js
und überprüfen Sie, wie sie es tun.Hier sind einige prominente Bibliotheken, die sich ab Dezember 2019 mit der Browsererkennung befassen.
Bowser von lancedikson - 4.065 ★ s - Letzte Aktualisierung 2. Oktober 2019 - 4.8KB
* unterstützt Edge basierend auf Chromium
Platform.js von bestiejs - 2.550 ★ s - Letzte Aktualisierung 14. April 2019 - 5.9KB
jQuery Browser von gabceb - 504 ★ s - Letzte Aktualisierung 23. November 2015 - 1,3 KB
Detect.js (Archiviert) von darcyclarke - 522 ★ s - Letzte Aktualisierung 26. Oktober 2015 - 2,9 KB
Browsererkennung (archiviert) von QuirksMode - Letzte Aktualisierung 14. November 2013 - 884B
Bemerkenswerte Erwähnungen:
Weiterführende Literatur
quelle
Für den Fall, dass jemand dies nützlich findet, habe ich die Antwort von Rob W in eine Funktion umgewandelt, die die Browserzeichenfolge zurückgibt, anstatt mehrere Variablen im Umlauf zu haben. Da sich der Browser auch nicht wirklich ändern kann, ohne ihn erneut zu laden, habe ich das Ergebnis zwischengespeichert, um zu verhindern, dass es beim nächsten Aufruf der Funktion bearbeitet werden muss.
quelle
window.chrome.webstore
wurde in Chrome 71 entfernt, sodass dieser Ansatz nicht mehr funktioniert.Kurze Variante
quelle
Hier ist eine 2016 angepasste Version von Robs Antwort, einschließlich Microsoft Edge und Erkennung von Blink:
( Bearbeiten : Ich habe Robs Antwort oben mit diesen Informationen aktualisiert.)
Das Schöne an diesem Ansatz ist, dass er sich auf die Eigenschaften der Browser-Engine stützt und daher auch abgeleitete Browser wie Yandex oder Vivaldi abdeckt, die praktisch mit den wichtigsten Browsern kompatibel sind, deren Engines sie verwenden. Die Ausnahme ist Opera, das sich auf das Schnüffeln von Benutzeragenten stützt, aber heute (dh ab Version 15) ist sogar Opera selbst nur eine Shell für Blink.
quelle
!!window.MSAssertion;
Test funktioniert bei mir in der Edge-Beta über Remotedesktop nicht. Es wird false zurückgegeben.MSAssertion
Trick ist auf Version 25 angepasst. Da sich jedoch viele Entwickler auf die VMs verlassen, werde ich versuchen, diese ältere Version anzupassen. Guter Anruf. Vielen Dank.StyleMedia
(großgeschriebene) Objekt ist spezifisch für IE und Edge und scheint nirgendwo hin zu gehen.Sie können die verschiedenen Browser-Fehlermeldungen verwenden
try
undcatch
verwenden. IE und Edge waren verwechselt, aber ich habe die Ententypisierung von Rob W verwendet (basierend auf diesem Projekt hier: https://www.khanacademy.org/computer-programming/i-have-opera/2395080328 ).quelle
Dank euch allen. Ich habe die Codefragmente hier in den letzten Browsern getestet: Chrome 55, Firefox 50, IE 11 und Edge 38, und ich habe die folgende Kombination gefunden, die für alle von ihnen funktioniert hat. Ich bin sicher, dass es verbessert werden kann, aber es ist eine schnelle Lösung für alle, die es brauchen:
Es fügt dem HTML-Code eine CSS-Klasse mit dem Namen des Browsers hinzu.
quelle
Keine Ahnung, ob es für jemanden nützlich ist, aber hier ist eine Variante, um TypeScript glücklich zu machen.
}}
navigator.userAgent
dass er Ihnen sagt, dass jeder Browser möglich ist. Dies ist also wirklich nicht zuverlässig. Der einzige Fall, in dem es funktionieren würde, ist, wenn der Benutzer nur einen Browser hat.Erkennen von Browsern auf Desktop und Mobile: Edge, Opera, Chrome, Safari, Firefox, IE
Danke @nimesh Benutzer: 2063564
quelle
Es gibt auch eine weniger "hackige" Methode, die für alle gängigen Browser funktioniert. Google hat einen Browser-Check in seine Closure Library aufgenommen . Schauen Sie sich insbesondere
goog.userAgent
und angoog.userAgent.product
. Auf diese Weise sind Sie auch auf dem neuesten Stand, wenn sich etwas an der Darstellung der Browser ändert (vorausgesetzt, Sie führen immer die neueste Version des Closure-Compilers aus.)quelle
Wenn Sie wissen müssen, wie die numerische Version eines bestimmten Browsers lautet, können Sie das folgende Snippet verwenden. Derzeit wird Ihnen die Version von Chrome / Chromium / Firefox angezeigt:
quelle
UAParser ist eine der leichtgewichtigen JavaScript-Bibliotheken zum Identifizieren von Browser, Engine, Betriebssystem, CPU und Gerätetyp / -modell anhand der userAgent-Zeichenfolge.
Es ist ein CDN verfügbar. Hier habe ich einen Beispielcode zum Erkennen des Browsers mit UAParser eingefügt.
Jetzt können Sie den Wert von verwenden
result.browser
, um Ihre Seite bedingt zu programmieren.Quell-Tutorial: Wie erkenne ich Browser, Engine, Betriebssystem, CPU und Gerät mithilfe von JavaScript?
quelle
quelle
Dies kombiniert sowohl Robs ursprüngliche Antwort als auch Pilaus Update für 2016
quelle
Hier erfahren Sie, welcher Browser ausgeführt wird.
quelle
Wir können unten util Methoden verwenden
quelle
quelle
Eine einfache, einzelne Zeile JavaScript-Code gibt Ihnen den Namen des Browsers:
quelle
navigator.userAgent
dass er Ihnen sagt, dass jeder Browser möglich ist. Dies ist also wirklich nicht zuverlässig. Der einzige Fall, in dem es funktionieren würde, ist, wenn der Benutzer nur einen Browser hat.