/ / Prečo je jQuery $ .browser.safari v prehliadači Chrome pravdivý? - jquery, google-chrome

Prečo je jQuery $ .browser.safari pravdivý v prehliadači Chrome? - jquery, google-chrome

V mojom prehliadači Chrome Verzia 36.0.1985.125 m konzola, pomocou jQuery 1.7.1.

Skúsil som :-

$.browser.safari
true

Prečo je tento výnos pravdivý?

$.browser.webkit

tiež sa vracia true pre mňa za rovnakých podmienok.

odpovede:

5 pre odpoveď č. 1

To je dôvod, prečo je čuchanie prehliadača tak veľmi zamračené: je to úplný neporiadok a bolo by dobré, keby ste to nikdy neuvažovali.

Reťazec user-agent prehliadača Chrome obsahujepodreťazec „WebKit“, a to zahŕňa verzie prehliadača Chrome, ktoré namiesto pôvodného zostavenia WebKit používajú modul Blink, pretože samotný Blink vznikol ako vidlica WebKit. Napríklad tu je môj:

Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537,36 (KHTML, napríklad Gecko) Chrome / 36.0.1985.125 Safari / 537,36

Môžete to vidieť nikde v tomto reťazci user-agent je Blink dokonca označovaný menom; stále sa označuje ako AppleWebKit!

detekcia prehliadača jQuery prostredníctvom servera $.browser vlastnosť pozostávala z ničoho iného ako zo série jednoduchých regexových zhôd navigator.userAgent pre príslušné kľúčové slová. Toto je uvedené v dokumentácia, ale čo je dôležitejšie, odráža to zdrojový kód:

  1. Riadok 60:

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

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

    browserMatch = jQuery.uaMatch( userAgent );
    if ( browserMatch.browser ) {
    jQuery.browser[ browserMatch.browser ] = true;
    jQuery.browser.version = browserMatch.version;
    }
    

Tieto úryvky teraz riešia prečo $.browser.webkit platí pre Chrome. Ale čo $.browser.safari? Safari a Chrome sú zjavne dva úplne odlišné produkty prehľadávača, aj keď ich vykresľovacie nástroje zdieľajú dedičstvo, tak prečo by to tak bolo safari platí to aj pre prehliadač Chrome?

Odpoveď nájdete v bloku okamžite po uaMatch() volať vyššie:

// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}

Inými slovami, u oboch sa odrážala rovnaká hodnota $.browser.webkit a $.browser.safari. To sa zdá zvláštne, ale potom, keď sa pozriete naReťazec user-agent prehliadača Chrome znova, všimnete si, že na Safari sa odkazuje aj menom! Takže aj keď sa nepokúšali o synonymizáciu Safari a WebKit, reťazec user-agent by ich aj tak zhodoval s obidvomi prehliadačmi.

Teraz sa môžete pýtať, prečo to nebolo nikdy opravené? Prečo nie len zaviesť a chrome majetok do $.browser riešiť veci inak pre Chrome? Je to preto, že $.browser samotná podpora v jQuery 1.3, ktorá bola vydaná, bola ukončená začiatkom roka 2009, kedy bol Chrome stále novým dieťaťomblok, o ktorom hovorili všetci na webe. (A len pre informáciu, je to už viac ako pred piatimi rokmi.) Vzhľadom na to, že čuchanie v prehliadači bolo v tom čase už vychladené, neexistoval žiadny alebo žiadny stimul na nápravu, preto ho zastarali a ponechali ho tak, ako to bolo.