Как определить IE 8 с помощью jQuery?

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

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

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

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

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

Изменить: обратите внимание, что JQuery 2+ отказался от поддержки IE8 и ниже и, следовательно, больше не может использоваться для обнаружения IE8. Если вы используете текущую версию JQuery, необходимо использовать решение Non-JQuery.

Ответ 1

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

UPDATE: $. браузер удален в jQuery 1.9

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

Ответ 2

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

Из шаблона 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 +.

Ответ 3

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

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

- обновить

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

Ответ 4

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

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

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

Ответ 5

document.documentMode - undefined, если браузер не IE8,

он возвращает 8 для режима стандартов и 7 для "совместимых с IE7"

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

Ответ 6

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

  • ... что это корявый механизм рендеринга старых версий 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||'') в качестве ключа для хранения и проверить результат этого теста в каком-либо объекте.

Ответ 7

Примечание:

1) $.browser, похоже, выпадает в jQuery 1.9+ (как отмечено Mandeep Jain). Рекомендуется использовать .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...: (

До сих пор я нашел, что это работает (kind-a):

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

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

Вы можете легко определить тип и версию браузера, используя этот 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');
 }
});

Ответ 11

Здесь браузер Jquery обнаруживает плагин, чтобы идентифицировать обнаружение браузера /os.

Вы можете использовать это для стилизации после включения плагина.

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

Ответ 12

Вы можете использовать $.browser для определения имени браузера. Возможные значения:

  • webkit (с jQuery 1.4)
  • сафари (устаревший)
  • опера
  • MSIE
  • Mozilla

или получить логический флаг: $.browser.msie будет true, если браузер MSIE.

как для номера версии, если вас интересует только основной номер выпуска - вы можете использовать parseInt ($. browser.version, 10). не нужно самостоятельно разбирать строку $.browser.version.

В любом случае свойство $.support доступно для обнаружения поддержки определенных функций, а не для использования $.browser.