In meinem Chrome Version 36.0.1985.125 m Konsole verwenden jQuery 1.7.1.
Ich habe es versucht :-
$.browser.safari
true
Warum kommt das zurück?
$.browser.webkit
kommt auch zurück true
für mich unter den gleichen Bedingungen.
Antworten:
5 für die Antwort № 1Aus diesem Grund ist das Browserschnüffeln so verpönt: Es ist ein komplettes Durcheinander, und Sie würden gut daran denken, es überhaupt nicht in Betracht zu ziehen.
Die Chrome-Benutzeragentenzeichenfolge enthält dieTeilzeichenfolge "WebKit"; dazu gehören Versionen von Chrome, die das Blink-Modul anstelle des ursprünglichen WebKit-Builds verwenden, da Blink selbst als Zweig von WebKit entstand. Zum Beispiel hier meine:
Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 36.0.1985.125 Safari / 537.36
Sie können sehen, dass nirgends In dieser Benutzer-Agent-Zeichenfolge wird Blink sogar mit dem Namen bezeichnet. es wird immer noch als AppleWebKit bezeichnet!
Die Browsererkennung von jQuery über die $.browser
Die Eigenschaft bestand nur aus einer Reihe einfacher Regex-Übereinstimmungen navigator.userAgent
für die relevanten Keywords. Dies wird in der erwähnt Dokumentationaber noch wichtiger ist, dass der Quellcode dies widerspiegelt:
-
// Useragent RegExp rwebkit = /(webkit)[ /]([w.]+)/, ...
-
// Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent,
-
browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; jQuery.browser.version = browserMatch.version; }
Diese Ausschnitte behandeln nun den Grund $.browser.webkit
trifft für Chrome zu. Aber was ist mit $.browser.safari
? Natürlich sind Safari und Chrome zwei völlig unterschiedliche Browser-Produkte, auch wenn ihre Rendering-Engines eine gemeinsame Tradition haben. Warum also? safari
auch für Chrome wahr sein?
Die Antwort ist im Block zu finden unmittelbar nach dem uaMatch()
rufen Sie oben an:
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
Mit anderen Worten, der gleiche Wert wurde für beide wiedergegeben $.browser.webkit
und $.browser.safari
. Das erscheint seltsam, aber wenn man sich das anschautChrome-Benutzer-Agent-Zeichenfolge erneut, Sie werden feststellen, dass Safari auch mit dem Namen bezeichnet wird! Selbst wenn sie nicht versuchten, Safari und WebKit, die Benutzer-Agenten-Zeichenfolge, zu synchronisieren hätte sie für beide Browser sowieso angepasst.
Nun fragen Sie vielleicht, warum wurde das nie behoben? Warum nicht einfach einführen? chrome
Eigentum zu $.browser
mit Chrome anders umgehen? Das ist, weil $.browser
selbst wurde in jQuery 1.3 veraltet, veröffentlicht Anfang 2009Zu dieser Zeit war Chrome noch das neue Kindder Block, über den alle im Web sprachen. (Und nur fürs Protokoll, das ist jetzt schon vor über fünf Jahren.) Da das Browser-Schnüffeln zu dieser Zeit bereits unkool war, gab es wenig oder gar keinen Anreiz, das Problem zu beheben. Daher wurde es abgelehnt und so belassen.