Как определить IE 8 с помощью jQuery? - PullRequest
102 голосов
/ 04 февраля 2010

Мне нужно определить не только тип браузера, но и версию, используя jQuery. В основном мне нужно выяснить, является ли это IE 8 или нет.

Я не уверен, правильно ли я это делаю.

Если я это сделаю:

if (jQuery.browser.version >= 8.0) {
dosomething}

Я не уверен, что это будет работать для версии 8.123.45.6 или это будет?

Редактировать: обратите внимание, что JQuery 2+ прекратил поддержку IE8 и ниже, и поэтому больше не может использоваться для обнаружения IE8. При использовании текущей версии JQuery необходимо использовать решение не-JQuery.

Ответы [ 12 ]

173 голосов
/ 03 октября 2011

Я думаю, что лучшим способом было бы это:

Из шаблона HTML5:

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

в JS:

if( $("html").hasClass("ie8") ) { /* do your things */ };

особенно с тех пор, как $.browser был удален из jQuery 1.9 +.

89 голосов
/ 16 июня 2011

Это должно работать для всех минорных версий IE8

if ($.browser.msie  && parseInt($.browser.version, 10) === 8) {
  alert('IE8'); 
} else {
  alert('Non IE8');
}

- обновить

Обратите внимание, что браузер $. удален из jQuery 1.9

.
79 голосов
/ 04 февраля 2010

Это задокументировано в Документация jQuery API . Проверьте Internet Explorer с помощью $.browser.msie, а затем проверьте его версию с $.browser.version.

ОБНОВЛЕНИЕ: $. Браузер удален в jQuery 1.9

Метод jQuery.browser () устарел с jQuery 1.3 и удален в 1.9. При необходимости он доступен как часть плагина jQuery Migrate. Мы рекомендуем использовать функцию обнаружения функций с такой библиотекой, как Modernizr.

56 голосов
/ 04 февраля 2010

Не забывайте, что вы также можете использовать HTML для обнаружения IE8.

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

Имея это до того, как все ваши скрипты позволят вам просто проверить переменную ie или что-то еще.

27 голосов
/ 04 февраля 2010

document.documentMode не определено, если браузер не IE8,

возвращает 8 для стандартного режима и 7 для 'совместимого с IE7'

Если он работает под IE7, существует множество функций css и dom, которые не поддерживаются.

15 голосов
/ 04 сентября 2013

Предполагая, что ...

  • ... что это хрустящий движок рендеринга старых версий IE, который вы хотите обнаружить, чтобы стиль выглядел правильно в старом IE (в противном случае используйте функцию обнаружения)
  • ... что вы не можете просто добавить условные комментарии к HTML - например, для плагинов JS, которые могут быть применены к любой странице (в противном случае просто сделайте трюк с условными классами на <body> или <html>)

... тогда это, вероятно, лучший трюк (на основе это не-jQuery, немного менее гибкий вариант ). Затем он создает тесты, а затем удаляет соответствующий условный комментарий.

(Условные комментарии игнорируются в стандартном режиме IE10 +, но это должно быть хорошо, поскольку в стандартном режиме IE10 + нет движка рендеринга!)

Отключение этой функции:

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

Тогда используйте это так:

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

Я бы также предложил кэшировать результаты этой функции, чтобы вам не приходилось повторять ее. Например, вы можете использовать строку (comparison||'')+' IE '+(version||'') в качестве ключа для хранения и проверки результата этого теста в каком-либо объекте.

9 голосов
/ 26 января 2013

Примечание:

1) $ .browser, по-видимому, отброшен в jQuery 1.9+ (как заметил Мандип Джайн). рекомендуется вместо .support .

2) $. Browser.version может возвращать «7» в IE> 7, когда браузер находится в режиме «совместимости».

3) Начиная с IE 10, условные комментарии больше не будут работать.

4) jQuery 2.0+ упадет поддержка IE 6/7/8

5) document.documentMode, по-видимому, определяется только в браузерах Internet Explorer 8+. Возвращенное значение скажет вам, в каком режиме «совместимости» работает Internet Explorer. Тем не менее, это не очень хорошее решение.

Я пробовал множество опций .support (), но похоже, что когда браузер IE (9+) находится в режиме совместимости, он будет просто вести себя как IE 7 ...: (

Пока я нашел это только для работы (вид-а):

(если documentMode не определен и htmlSerialize и opacity не поддерживаются, то вы, скорее всего, смотрите IE <8 ...) </p>

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}
5 голосов
/ 21 декабря 2012

Если вы возитесь с версиями браузера, это часто приводит к плохому результату. Вы не хотите реализовать это самостоятельно. Но вы можете Modernizr , сделанный Полом Айришем и другими умными людьми. Он обнаружит, что браузер на самом деле может сделать, и поместит соответствующие классы в элемент <html>. Однако с Modernizr вы можете протестировать версию IE следующим образом:

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

Аналогично, вы можете использовать .lt-ie8 и .lt-ie7.

3 голосов
/ 19 сентября 2011

Вы можете легко определить, какой тип и версию браузера, используя этот jquery

$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});
3 голосов
/ 04 февраля 2010

Вы также должны посмотреть на jQuery.support . Обнаружение функций намного надежнее, чем обнаружение браузером для кодирования вашей функциональности (если только вы не пытаетесь регистрировать версии браузера).

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