/ / Чому jQuery $ .browser.safari вірно в Chrome? - jquery, google-chrome

Чому в Chrome існує jQuery $ .browser.safari? - jquery, google-chrome

У моєму 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 для відповідних ключових слів. Про це згадується в документація, але, що ще важливіше, вихідний код відображає це:

  1. Рядок 60:

    // Useragent RegExp
    rwebkit = /(webkit)[ /]([w.]+)/,
    ...
    
  2. Рядок 75:

    // Keep a UserAgent string for use with jQuery.browser
    userAgent = navigator.userAgent,
    
  3. Рядок 899:

    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 був ще новим малюкомблок, про який говорили всі в Інтернеті. (І тільки для запису, що це вже більше п’яти років тому.) Враховуючи, що нюхання браузера в той час уже було не охолоджене, було мало жодних стимулів виправити це, тож вони знеструмили його та залишили його таким, яким він був.