Статьи

5 причин, почему браузер нюхает воняет

Browser sniffing Обнаружение браузера — это обнаружение веб-браузера, который использует посетитель для обслуживания страниц, сценариев, изображений или другого содержимого, относящегося к определенной версии. Техника была популярна около 10 лет назад, потому что Microsoft и Netscape представили свои собственные технологии, и веб-стандарты были в зачаточном состоянии. В те мрачные дни было довольно распространено написание двух или более клиентских сценариев для реализации идентичных функций в разных браузерах.

К счастью, сеть прогрессировала. Редко возникает необходимость в форке кода для разных устройств, но недавний опыт Opera с версией 10 показывает, что перехват браузера остается обычным делом.

Технически, браузер нюхает, кажется, довольно просто. Вы получаете строку пользовательского агента, используя navigator.userAgent в JavaScript или HTTP_USER_AGENT среды HTTP_USER_AGENT на сервере, и анализируете ее соответствующим образом. Однако, не будьте самодовольными; браузер сниффинг не должен использоваться!

1. Разбор строк очень сложен

Строки агента пользователя не соответствуют определенным шаблонам, например:

  • IE8: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 6.0; Trident / 4.0; SLCC1;
  • Firefox 3: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-GB; rv: 1.9.0.10) Gecko / 2009042316 Firefox / 3.0.10
  • Opera 9: Opera / 9.64 (Windows NT 6.0; U; ru) Presto / 2.1.1

Браузер, версия, движок рендеринга, ОС, язык и информация о медиапроигрывателях и платформах .NET могут передаваться различными способами. Тестирование каждой комбинации невозможно; Opera 10 сообщает о версии 9.8, потому что некоторые анализаторы ошибочно полагают, что это версия 1.

2. Есть много браузеров для обработки

Десять лет назад было всего три основных браузера с одной или двумя значимыми версиями каждого. Сегодня существует не менее пяти основных браузеров с несколькими версиями, работающими на разных платформах. Обеспечить, чтобы вы указали только нужный браузер в нужное время, не влияя на других, нелегко.

3. Уменьшенная масштабируемость и повышенное обслуживание

Сложнее поддерживать разные наборы кода для разных устройств, и они не могут быть проверены на будущее. Кроме того, ваш код может ломаться каждый раз, когда выпускается новый браузер или версия. Это происходит все чаще и чаще.

4. Браузерный маскарад

В течение многих лет Opera притворялась Internet Explorer, передавая пользовательский агент этого браузера. Это помогло пользователям Opera посещать сайты, которые обычно отказывались от браузеров не IE. Это все еще можно сделать сегодня.

5. Это редко требуется

Благодаря веб-стандартам анализатор браузеров стал менее необходим на стороне сервера, если только вы не внедрили приложение статистики браузера.

У JavaScript действительно есть несколько проблем совместимости между браузерами, но обнаружение объектов обычно является лучшим решением. Например, IE7 и ниже не имеют встроенной поддержки XMLHttpRequest, объекта, необходимого для запросов Ajax. Однако вместо этого можно использовать идентичный объект ActiveX — большинство библиотек реализуют такой код:

 var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")); 

Возможное исключение может быть прогрессивным улучшением, нацеленным на определенные браузеры. Например, для поддержки 24-битных PNG в IE5.5 и IE6 можно использовать анализатор браузера, поэтому изображения заменяются только при необходимости. Однако это обходной путь, который в конечном итоге будет удален, когда люди перестанут использовать эти браузеры.

Кроссбраузерный CSS также возможен — да, даже в IE6. Условные таблицы стилей могут помочь в экстремальных случаях, хотя я лично избегаю их, потому что это все еще похоже на анализ браузера!

См. Также: почему пользовательский агент Opera 10 плохо пахнет

Вы избегаете перехвата браузера? Есть ли ситуации, когда это необходимо?