Як виявити IE 8 за допомогою jQuery?


102

Мені потрібно виявити не тільки тип браузера, але і версію, використовуючи jQuery. Переважно мені потрібно з’ясувати, чи це IE 8 чи ні.

Я не впевнений, чи правильно це роблю.

Якщо я:

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

Я не впевнений, що він буде працювати для версії 8.123.45.6 чи буде?

Редагувати: Зауважте, що JQuery 2+ відмовився від підтримки IE8 і нижче, а тому більше не можна використовувати для виявлення IE8. Якщо використовується поточна версія JQuery, необхідно використовувати рішення, яке не належить до JQuery.


11
запропоновані нижче відповіді пропонують використовувати jQuery.browser. Однак документація на jQuery знецінює використання jQuery.browser. Натомість вони пропонують скористатися jQuery.support і вказати на функцію, яка не підтримується для позначення браузера. Наприклад, ви можете використовувати if (jQuery.support.opacity == false) {ваш код IE8 та IE7}
IberoMedia

Це jquery.support.opacityпросто робив те, що я хотів. Дякую ...
nrod


Якщо ви робите все належним чином, вам навряд чи потрібно буде виявляти версію браузера. Існує причина, що цю функцію було видалено з jQuery, і ця причина полягає в тому, що виявлення версії браузера є поганою практикою. Використання функції виявлення натомість вирішить проблему майже у всіх випадках.
Спудлі

2
Мені потрібно виявити IE8, тому що це єдиний браузер, який працює в JavaScript, настільки повільний, що відкриває діалогове вікно, на якому написано "чи хочете ви припинити запуск сценарію" на цій сторінці, а за замовчуванням - "так". Якщо для цього є механізм виявлення функцій, я його використовуватиму. Інакше це якщо браузер == IE8. Я не можу оптимізувати javascript, тому що його викликає власний код перегляду
дерев

Відповіді:


79

Це задокументовано в документації API jQuery . Перевірте Internet Explorer з, $.browser.msieа потім перевірте його версію $.browser.version.

ОНОВЛЕННЯ: $ .browser видалено у jQuery 1.9

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


якщо я це робити: якщо (jQuery.browser.version> = 8.0) {dosomething} Я не впевнений, що він буде працювати для версії 8.123.45.6, чи буде?
сальман

13
Це рядок, так що вам слід зробити if(jQuery.browser.version.substring(0, 2) == "8.") { ... }. Таким чином він буде працювати з усіма версіями IE8.
AndiDog

13
jQuery.browserзастаріла в 1.3 і може бути перенесена у плагін у майбутньому. Дивіться документи jQuery.browser
bendytree

На щастя, це все ще навколо, і про згадку немає згадки, @bendytree
Alastair

47
jquery.browser видалено в 1.9
Mandeep Jain

173

Я думаю, що найкращим способом було б таке:

З котло 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+.


11
Це дуже розумний спосіб виявлення версій IE. Мені дуже подобається!
Грег

але не працює, якщо ваш веб-сайт розміщено із заголовком "Тип вмісту: application / xhtml + xml", ніж ці умовні коментарі ігноруються
philipp

1
Дуже розумно ... але варто зазначити, що вам потрібно перевірити поточні класи, додані умовними умовами в HTML5BP. На даний момент я думаю, що клас lt-ie9AOTie8
byronyasgur

2
@meo Мені також подобається ця реалізація. Але чи є причина, до якої додається клас <html>замість <body>?
відпочивав

@meo Цікаво. Дякую.
відпочиває


56

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

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

Наявність цього перед усіма вашими сценаріями дозволить вам просто перевірити змінну "тобто" чи що завгодно.


4
Цей синтаксис також підтримує порівняння "менше ніж" ("[якщо lt IE 7]") і "більше, ніж" ("[якщо gt IE 8]").
spiffytech

1
<! - [якщо lte IE 8]> для включення ie8
user227353

1
Це найкращий спосіб зробити це, просто перенаправити на іншу сторінку, на якій написано "Чому ви використовуєте IE8?" ОНОВИТИ ЗАРАЗ!
Леон Габан

2
За сьогоднішнім стандартом я б запитав їх, чому вони взагалі використовують IE.
TheBuzzSaw

Це виглядає як найкраще рішення зараз, оскільки JQuery 2.1.1 не працює з IE8, а тому не може бути використаний для виявлення IE8!
Дейв

27

document.documentMode не визначено, якщо браузер не IE8,

він повертає 8 для стандартного режиму і 7 для "порівнянного з IE7"

Якщо він працює як IE7, існує багато функцій css і dom, які не підтримуються.


9
Зауважте, що IE9 повертає 9. Це має бути відповіді з більш високим голосом, але тепер, коли $ .browser вже не є хорошим рішенням. Спробуйте:if ((document.documentMode || 100) < 9) { // IE8
Дон МакКерді

if (document.documentMode! == undefined && document.documentMode == 8) {...}
jpprade

Для деяких додатків, де IE8 ще дуже використовується, а саме американських шкіл, - підхід Дон МакКурді є простим і ефективним. У тандемі з Modernizr це чудово працює.
cbmtrx

Чудова відповідь! Це повертає номери версій для IE8 до IE11 (порівняно з IE5 до IE9 для умовних коментарів - якщо комусь ще потрібно виявити справжні IE7 або IE6, вам потрібно буде використовувати умовні коментарі). Зауважте, що згідно з документами він може повертатися 0під час завантаження сторінки - "спробуйте визначити режим сумісності документів пізніше" (тобто після готовності документа).
user56reinstatemonica8

15

Припускаючи ...

  • ... що це хрусткий двигун візуалізації старих версій 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

Примітка:

1) Схоже, що $ .browser перебуває у jQuery 1.9+ (як зазначає Mandeep Jain). Він рекомендується використовувати .Підтримка замість.

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
}

5

Якщо ви поспілкуєтесь із версіями браузера, це дуже часто не приносить користі. Ви не хочете реалізувати це самостійно. Але ви можете Modernizr, зроблений Полом Ірландським та іншими розумними людьми. Він виявить, що насправді може робити браузер , і помістить відповідні класи в <html>елемент. Однак за допомогою Modernizr ви можете протестувати версію IE на зразок цієї:

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

Подібні, ви можете використовувати .lt-ie8, і .lt-ie7.


3

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


3
як би ви використовували jQuery.support для виявлення IE8?
BishopZ

якщо AJAX - це те, що ви шукаєте, ви можете використовувати jQuery.support.ajax, який повертає справжнє значення, якщо браузер підтримує AJAX
Джонатан Лін

Відповідь на це питання має допомогти: stackoverflow.com/questions/1944169 / ...
helgatheviking

3

Ви можете легко визначити тип і версію браузера, скориставшись цим 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');
 }
});

1

Ось браузер Jquery виявляє плагін для виявлення браузера / виявлення ОС.

Ви можете використовувати це для цілей стилізації після включення плагіна.

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

0

Ви можете використовувати $ .browser для виявлення імені браузера. Можливі значення:

  • webkit (станом на jQuery 1.4)
  • сафарі (застаріле)
  • опера
  • мсі
  • мозіла

або отримати булевий прапор: $ .browser.msie буде істинним, якщо браузер MSIE.

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

У будь-якому випадку, властивість $ .support доступна для виявлення підтримки для певних функцій, а не покладання на $ .browser.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.