Обнаружение IE6 с использованием Javascript / JQuery повторно - PullRequest
3 голосов
/ 06 августа 2010

Мне нужно обнаружить IE6, чтобы обойти отсутствие позиции: исправлено.Я использовал простое регулярное выражение:

var isIE6 = /msie|MSIE 6/.test(navigator.userAgent);

Это работает почти все время, за исключением пользователя, чей браузер утверждает, что оба IE6 и IE7:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30)

Glorious.

Я бы хотел использовать jquery.support , но похоже, что он не поддерживает запрос о доступности позиции: фиксированная.Итак, я вернулся к обнаружению IE6.

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

Я думаю об использовании условных комментариев - таким образом, по крайней мере, этоСам IE будет претендовать на IE6, а не взломать.Что-то вроде:

<!--[if IE 6]>
<SCRIPT> var isIE6 = true; </SCRIPT>
<![endif]-->

В качестве альтернативы есть af unction, который непосредственно проверяет, доступно ли положение: fixed , но это кажется немного тяжелым.

По какой причине мой подход к условным комментариям не будет работать?Есть ли лучшие подходы?

Ответы [ 6 ]

6 голосов
/ 06 августа 2010
<script type="text/javascript">
    if (nothing_works) {
        is_ie6 = true;
    }
</script>

Если серьезно, ваш условный комментарий, вероятно, является лучшим и наиболее точным методом обнаружения.Даже если браузер находится в их пользовательском агенте, он, вероятно, не будет анализировать условный комментарий, как если бы это был IE6.

Мне нужно немного пойти домой и поплакать, когда я узнал, что кто-то все еще разрабатывает для IE6.

5 голосов
/ 06 августа 2010

Пол Ирландский написал добавление к $.support специально для проверки поддержки position: fixed. Я рекомендую вам пойти по этому пути, используя, по возможности, обнаружение функций, а не обнаружение в браузере.

Вам просто нужно включить последнюю функцию в это дополнение, эту часть:

$.support.positionFixed = (function() { ..... })();

Включите это после jQuery, затем вы можете использовать его в своем коде, например:

if(!$.support.positionFixed) {
  //handle browsers that don't support it
}
1 голос
/ 06 августа 2010

Лучший способ преодолеть проблемы с IE - использовать условные комментарии:

<!--[if IE 6]>
... link IE 6 specific stylesheet or a script...
<![endif]-->

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

0 голосов
/ 06 августа 2010

Я говорю, что вы должны пойти с условным комментарием тоже.Это хорошо работает для CSS и JavaScript или чего-то еще, что вы можете захотеть там разместить.Мне кажется, что это лучший вариант.Но я бы не использовал переменную, как вы использовали в своем примере.Я бы выбрал внешнюю ссылку ie6.js, которая переопределит все, что вы делаете в исходном коде, отличном от ie6.Таким образом, вы не получите ie6 ненужных / переменных в вашем чистом коде.

<!--[if IE 6]>
<script type="text/javascript" src="ie6.js"></script>
<![endif]-->
0 голосов
/ 06 августа 2010

В блоге IE есть хороший и подробный пост об обнаружении функций:

http://blogs.msdn.com/b/ie/archive/2010/04/14/same-markup-writing-cross-browser-code.aspx

В основном они (понятно) против определения версии браузера:

«НЕ ОБНАРУЖИТЬ: Определять браузеры»

Существует так много сценариев (как в вашем примере), в которых браузеры полагаются на свои версии, вместо этого лучше использовать функцию обнаружения.

0 голосов
/ 06 августа 2010

http://api.jquery.com/jQuery.browser/

if ($.browser.msie && parseInt($.browser.version) == 6) {
  // do something
}
...