Обнаружение IE8 надежно с использованием JavaScript - PullRequest
8 голосов
/ 31 августа 2010

Я написал веб-приложение, которое требует IE версии 8 (или выше, предположительно).Если я запускаю IE8 на чистой установке Windows на виртуальной машине, он сообщает «MSIE 8.0» как пользовательский агент при запросе с navigator.userAgent в javascript.Но на компьютере коллеги с Windows 7 его IE сообщает о версии 8 в окне Help | About, но строка пользовательского агента - «MSIE 7.0».

Я полагаю, что где-то на его машине есть настройка, которая сообщает IEчтобы подделать предыдущую версию, я полагаю, какая-то настройка совместимости, но я не могу ее найти.Я не настраиваю режим совместимости quirksmode или IE7 с моей стороны.

Ответы [ 8 ]

12 голосов
/ 31 августа 2010
<meta http-equiv="X-UA-Compatible" content="IE=8">
<script type="text/javascript">
var is_ie8_or_newer = false;
</script>
<!--[if gte IE 8]>
<script type="text/javascript">
is_ie8_or_newer = true;
</script>
<![endif]-->
7 голосов
/ 31 августа 2010

Пользовательский агент не является разумным или надежным способом определения версии браузера. Почему бы вам не найти наличие нужной вам функции, сделав ее только для IE8, и использовать ее? Это гораздо более надежный метод.

4 голосов
/ 31 августа 2010

Самый интересный трюк, который я видел & mdash; не имея представления о его эффективности & mdash; заключается в использовании функции условных комментариев IE динамически . Для этого ваш код берет скрытый <div> или <div> во фрагменте документа, или что-то еще, и вставляет в него некоторый HTML, окруженный условным комментарием, закодированным для проверки конкретной версии браузера:

var dummy = document.getElementById('dummy');
dummy.innerHTML = '<!' + '--[if IE 8]>x<![endif]-->';
var isIE8 = dummy.innerHTML === 'x';

IE8 может показать маленькую кнопку рядом с полем URL, которое переключает браузер между режимом IE7 и режимом IE8. Вы можете открыть «Инструменты разработчика», и это скажет вам, каковы текущие настройки.

2 голосов
/ 31 августа 2010

Не могли бы вы использовать условные комментарии?

<script>
  var is_ie8 = false;
</script>
<!--[if IE 8]>
  <script>
    is_ie8 = true;
  </script>
<![endif]-->
0 голосов
/ 29 марта 2014

Нашел эту сладкую функцию на GIT (в комментариях) :

function getIEVersion() 
{    
    var v = 3, div = document.createElement('div'), a = div.all || [];
    while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]); 
    return v > 4 ? v : !v;    
};
0 голосов
/ 31 августа 2010

Оказывается, его браузер был настроен на отображение всех «сайтов интрасети» в режиме совместимости. Кроме того, да, режим совместимости изменяет строку пользовательского агента.

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

Единственный способ выяснить, как заставить мою версию IE8 сказать, что это IE7, - включить представление совместимости.Смотри http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

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

http://www.modernizr.com/

Он должен обнаруживать такие проблемы. Кроме того, я не уверен, но IE 8 может переключить свой тег User-Agent в «Режим совместимости».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...