Как использовать условную компиляцию для сниффинга IE8 - PullRequest
2 голосов
/ 09 июля 2011

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

Теперь я использовал этот код условной компиляции:

var ie8 = false/*@cc_on @_jscript_version == 8@*/

НоКажется, что он также включает в себя IE7.Есть идеи?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

Предполагается, что вы используете Internet Explorer ...

Во-первых, крайне ненормально для проверки версии браузера - для проверки нужно использовать document.documentMode (поскольку страница может быть в режиме IE8, даже если используется IE9 или IE10):

if (document.documentMode == 8) { ...

Если у вас есть какое-то странное требование действительно , то вы можете надежно определить версию JScript, например _jscript_version is5.8 для IE8 (см. http://en.wikipedia.org/wiki/Conditional_comment):

var ieJsVer = Function('return/*@cc_on @_jscript_version @*/;')();
var isIE8 = (ieJsVer == 5.8);

Условный комментарий помещается в строку, чтобы он не был удален при любом сжатии JavaScript, которое может произойти (которое может быть удалено)комментарии).

Важно Internet Explorer 11 редактировать:

  • Добавлено;в конце строки Function () - иначе IE11 в режиме EDGE выдает исключение - arrrgh!
  • IE11 в режиме EDGE, тогда ieJsVer не определен
  • IE11 в docMode <= 10, тогда ieJsVer равен 11 </li>
  • IE11 в режиме EDGE возвращает неопределенное значение для document.documentMode
3 голосов
/ 09 июля 2011

Без использования условных компиляций вы можете использовать условные комментарии, чтобы установить класс для элемента html для каждого IE, для которого вы хотите проверить, например:

<!--[if lt IE 7 ]> <html lang="en" class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->

(из * 1006)*

Тогда было бы просто проверить класс в JS:

var ie8 = !!document.getElementsByTagName("html")[0].className.match(/ie8/);

1 голос
/ 09 июля 2011

Почему бы не использовать условные комментарии для переключения скрипта, который устанавливает переменную?Как:

<head>
    <script>
        window.ie8 = false;
    </script>
    <!--[if IE 8]>
        <script>
            window.ie8 = true;
        </script>
    <![endif]-->
</head>

Конечно, это немного многословно, но, возможно, это также более надежно.

...