У моєму Chrome Версія 36.0.1985.125 м консоль, використовуючи jQuery 1.7.1.
Я намагався :-
$.browser.safari
true
Чому це повернення відповідає дійсності?
$.browser.webkit
також повертається true
для мене на тих самих умовах.
Відповіді:
5 за відповідь № 1Ось чому нюхає браузер так сильно нахмуриться: це повний безлад, і ви б добре зробили, щоб навіть не думали робити це ніколи.
Рядок-агент користувача Chrome міститьпідряд "WebKit", і це включає версії Chrome, які використовують двигун Blink замість оригінальної збірки WebKit, оскільки сам Blink зародився як роздріб WebKit. Наприклад, ось моє:
Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, як і Gecko) Chrome / 36.0.1985.125 Safari / 537.36
Ви можете побачити це ніде у цьому рядку користувача-агента Blink навіть посилається на ім'я; це ще називають AppleWebKit!
Виявлення браузера jQuery через $.browser
Власність складалася з не що інше, як із серії простих збірок з регулярними виразами на navigator.userAgent
для відповідних ключових слів. Про це згадується в документація, але, що ще важливіше, вихідний код відображає це:
-
// 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; }
Тепер ці фрагменти вирішують, чому $.browser.webkit
вірно для Chrome. Але про що $.browser.safari
? Зрозуміло, що Safari і Chrome - це два абсолютно різних браузерних вироби, навіть якщо їхні рендеринг поділяють спадщину, то чому б safari
також правда для Chrome?
Відповідь можна знайти в блоці одразу після цього uaMatch()
дзвоніть вище:
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
Іншими словами, однакове значення відображалося для обох $.browser.webkit
і $.browser.safari
. Це здається дивним, але тоді, якщо ви подивитеся наЗнову рядок з користувацьким агентом Chrome, ви помітите, що Safari посилається також на ім'я! Тож навіть якщо вони не намагалися б синонімізувати Safari та WebKit, рядок з користувацьким агентом як би вони відповідали обом для будь-якого браузера.
Тепер ви можете запитати, чому це ніколи не було виправлено? Чому б просто не представити chrome
власність на $.browser
щоб по-різному обробляти речі для Chrome? Це тому $.browser
Сам був застарілий у jQuery 1.3, випущений на початку 2009 року, на той час Chrome був ще новим малюкомблок, про який говорили всі в Інтернеті. (І тільки для запису, що це вже більше п’яти років тому.) Враховуючи, що нюхання браузера в той час уже було не охолоджене, було мало жодних стимулів виправити це, тож вони знеструмили його та залишили його таким, яким він був.