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ď č. 1To 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:
-
// 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; }
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.