Обнаружение Javascript IE, почему бы не использовать простые условные комментарии? - PullRequest
47 голосов
/ 13 ноября 2010

Для обнаружения IE большинство библиотек Javascript выполняют всевозможные трюки.

  • jQuery, кажется, добавляет временный объект в DOM ваших страниц для обнаружения некоторых функций,
  • YUI2 выполняет регулярное выражение для пользовательского агента в своем YAHOO.env.ua = function() (файл yahoo.js)

После прочтения этого ответа мне пришло в голову, что это правда, чтобы просто определить IE в Javascript, мы могли бы просто добавить на наши страницы:

<!--[if IE]><script type="text/javascript">window['isIE'] = true;</script><![endif]-->

<script type="text/javascript" src="all-your-other-scripts-here.js"></script>

Теперь переменная window.isIE устанавливается для всего нашего кода Javascript, просто выполнив:

if(window.isIE)
   ...

Помимо того, что это может привести к боли, потому что это нужно добавить на всех страницах, Есть ли какие-либо проблемы / соображения, о которых я мог бы не знать?


К вашему сведению: я знаю, что лучше использовать обнаружение объектов, а не обнаружение в браузере , но в некоторых случаях вам все равно придется использовать обнаружение в браузере.

Ответы [ 15 ]

1 голос
/ 13 ноября 2010

Проверка браузеров - плохая идея, лучше вместо браузера проверить функции .Например, обычно вы проверяете, использует ли пользователь IE, потому что вы хотите использовать некоторые функции, не поддерживаемые в IE.Однако знаете ли вы, что ВСЕ текущие и будущие браузеры не IE будут поддерживать эту функцию?Нет. Таким образом, способ, используемый, например, jQuery, лучше: он создает и выполняет небольшие тестовые случаи, проверяя определенные ошибки / функции, - и вы можете просто проверить такие вещи, как if (browser_supports_XYZ) вместо проверки, использует ли пользователь определенный браузер.*

В любом случае, всегда есть случаи, когда необходимо проверить браузер, потому что это визуальная ошибка, которую вы не можете проверить на предмет использования скрипта.В этом случае лучше использовать javascript вместо условных комментариев, потому что браузер проверяет прямо в том месте, где он вам нужен, а не в каком-то другом месте (представьте себе файл .js, где вы проверяете isIE, который никогда не определяется в этом файле)

0 голосов
/ 03 января 2015

Почему бы вам просто не запрограммировать в HTML5 и не проверить,

if ( window.navigator.product !== "Gecko" )

?? Да, это будет включать IE11 в группу «Gecko», но разве он не должен быть достаточно хорошим сейчас?

Примечание: спецификация HTML5. говорит, что navigator.product должен возвращать "Gecko" ... и IE10, а ранее все возвращают что-то еще.

0 голосов
/ 08 марта 2014

Для моего случая использования мне просто нужно определить, ниже ли IE9, поэтому я использую

if (document.body.style.backgroundSize === undefined && navigator.userAgent.indexOf('MSIE') > -1)
{
//IE8- stuff
}
0 голосов
/ 25 сентября 2011

Это работает довольно хорошо,
var isIe = !!window.ActiveXObject;

0 голосов
/ 13 ноября 2010
  • Загрязняет глобальное пространство имен
  • Требуются изменения в двух файлах.
  • Работает только в IE
  • Технически условный комментарий все еще является комментарием
...