Если это вообще возможно, я бы рекомендовал избегать прямого обнаружения в браузере.
Почти в каждом случае, когда кто-то хочет обнаружить определенный браузер (обычно IE), это происходит потому, что он хочет использовать определенную функцию, которая недоступна в этом браузере или содержит ошибки.
Но обнаружение браузера не удается в качестве стратегии здесь по ряду причин:
- Вы не знаете, может ли будущая версия этого браузера исправить проблему, и в этом случае ваш код для устранения проблемы сам может вызвать проблемы.
- Если у другого браузера также есть проблема с этой функцией, вам придется также обнаружить этот браузер. Взятый до логического предела, так как нет двух браузеров, имеющих одинаковый набор функций, вам в конечном итоге придется обнаруживать все возможные комбинации браузера, версии и операционной системы.
- Обнаружение в браузере практически невозможно гарантировать, чтобы быть точным. Большинство сценариев обнаружения браузеров основаны на взломах, которые вызывают причуды, влияющие только на конкретный браузер, и большинство из них довольно ненадежны.
- Даже просто обнаружение IE не достаточно хорошо. Существует большая разница между IE6, IE7 и IE8. И IE9 не за горами, и он снова станет совершенно другим.
Так что же делать вместо обнаружения в браузере?
Обнаружение функции. Есть несколько способов сделать это, но лучшее из известных мне решений - это скрипт Modernizr . Разместите этот скрипт на своем сайте, и вашей странице будет предоставлен набор классов CSS и свойств Javascript, которые вы можете использовать, чтобы определить, доступна ли данная функция или нет.
Например, если вы хотите использовать градиенты на Ваш сайт, большинство браузеров могут использовать CSS для этого, но IE и более старые версии других браузеров не могут. Для этих браузеров вы легко можете использовать фоновое изображение. Modernizr предоставит вам класс CSS cssgradients
или no-cssgradients
, и вы сможете соответствующим образом оформить эти два класса.
Добавьте отсутствующие функции в браузер. Это более сложно, но для определенных функций это может быть сделано, особенно для IE. Хорошим примером является CSS3Pie , который является хаком, который позволяет IE использовать функцию CSS border-radius
(и одну или две другие функции тоже), которая доступна во всех других браузерах. Существует целый ряд других маленьких скриптов, подобных этому, которые могут улучшить функциональность IE.
Используйте библиотеку типа JQuery , которая сделает всю эту работу за вас. С JQuery вы можете быть намного увереннее в том, что большая часть кода Javascript будет работать во всех браузерах.
Если вы должны использовать обнаружение браузера, чтобы определить, использует ли пользователь IE (и я допускаю, что в некоторых случаях это необходимо), тогда используйте условные комментарии согласно ответу @David Thomas. Но делайте это экономно, обдумав любые другие способы обойти это.