/ / Warum ist jQuery $ .browser.safari in Chrome wahr? - jquery, google-chrome

Warum ist jQuery $ .browser.safari in Chrome wahr? - JQuery, Google-Chrome

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 № 1

Aus 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:

  1. Zeile 60:

    // Useragent RegExp
    rwebkit = /(webkit)[ /]([w.]+)/,
    ...
    
  2. Zeile 75:

    // Keep a UserAgent string for use with jQuery.browser
    userAgent = navigator.userAgent,
    
  3. Zeile 899:

    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.