Виявити версію IE (до v9) у JavaScript


246

Я хочу повернути користувачів нашого веб-сайту на сторінку помилок, якщо вони використовують версію Internet Explorerдо v9. Просто не варто витрачати наш час і гроші на підтримку IE pre-v9. Користувачі всіх інших веб-переглядачів, які не належать до IE, чудово і не повинні їх відмовляти. Ось запропонований код:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

Чи зробить цей код трюк?

Щоб відмовитися від кількох коментарів, які, ймовірно, йдуть моїм шляхом:

  1. Так, я знаю, що користувачі можуть підробити їх useragentрядок. Мене не хвилює.
  2. Так, я знаю, що профі програмування вважають за краще нюхати підтримку функцій замість типу браузера, але я не думаю, що цей підхід має сенс у цьому випадку. Я вже знаю, що всі (відповідні) pre-v9 IEброузери, які не належать до IE, підтримують потрібні мені функції та відсутність усіх браузерів. Функція перевірки за функціями на всьому сайті буде марною.
  3. Так, я знаю, що той, хто намагається зайти на сайт за допомогою IE v1(або> = 20), не встановить "badBrowser" на "true", а сторінка попередження не відображатиметься належним чином. Це ризик, який ми готові взяти на себе.
  4. Так, я знаю, що Microsoft має "умовні коментарі", які можна використовувати для точного виявлення версії браузера. IE більше не підтримує умовні коментарі IE 10, що робить цей підхід абсолютно марним.

Будь-які інші очевидні проблеми, які слід знати?


122
"Просто не варто витрачати наш час і гроші на підтримку IE pre-v9". Я б хотів, щоб я міг це зробити.
— Хассан

2
На основі пункту [2] я не пропоную Modernizr ( en.wikipedia.org/wiki/Modernizr ) - кожен повинен десь провести лінію в піску - але IE9 здається високою лінією
— amelvin

1
Умовні коментарі - це просто звичайні коментарі. Тільки IE трактує їх як особливі. IE10 + більше цього не робитиме.
— Андреас

3
Умовні коментарі будуть розглянуті точно так само, як IE 10, як браузери, які не є IE. Вони є дійсними коментарями HTML, тому вони будуть розглядатися як такі. Я погоджуюся з Андреасом і думаю, що умовні коментарі - це шлях.
— Тім Даун

1
Офіційна документація , яка говорить IE10 + не підтримуватиме умовні коментарі: blogs.msdn.com/b/ie/archive/2011/07/06 / ... - Дякую: stackoverflow.com/a/9900331/320399
— Blong

Відповіді:


354

Це мій бажаний спосіб зробити це. Це дає максимальний контроль. (Примітка. Умовні заяви підтримуються лише в IE5 - 9.)

Спочатку налаштуйте свої класи, тобто правильно

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

Тоді ви можете просто використовувати CSS для створення винятків у стилі, або, якщо вам потрібно, ви можете додати простий JavaScript:

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

Завдяки Полу Ірліш .


21
Зважаючи на те, що ОП попросило суто рішення JavaScript, я вважаю, що відповідь @Tim Down нижче є кращою, оскільки вона не передбачає зміни існуючого HTML, плюс це не використання jQuery: stackoverflow.com/a/10965203/134120
— AsGoodAsItGets

Я отримую помилку з цим у валідаторі w3 html:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
— abumalick

161

Повернути версію IE або якщо ні, то IE повернути хибну

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

Приклад:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

або

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

або

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
Не працює для IE11. З IE 11 вони змінили рядок UA на"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
— Енні

22
Зверніть увагу, що у FF "false <9" - "true". Отже, умова має бутиif (isIE () && isIE () < 9) {
— nZeus

3
@DeadlyChambers, можливо, він працював у режимі стандартів IE7? msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
— mason81

4
Затверджена відповідь - як виявити версію IE в HTML. Це дає відповідь на початкове запитання.
— Метт Вагнер

2
@PrasadGayan - Microsoft Edge не є Internet Explorer. Тож повернення помилки здається правильним для цього.
— BryanGrezeszak

120

Якщо ніхто інший не додав addEventLister-метод і ви використовуєте правильний режим браузера, ви можете перевірити IE 8 або менше за допомогою

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

Спадковий Internet Explorer і вкладенняEvent (MDN)


7
Це здається найефективнішим способом виявлення IE <= 8 повністю в JavaScript - і чудово підходить для таких людей, як я, які шукали спосіб це зробити.
— Григорій Магаршак

Чудово! Це також виявляє IE9 в режимі Quirks, що саме я шукав.
— sstur

7
Хоча це "просте у використанні" рішення, воно має певні ризики. Будь-хто у вашій компанії (який не знає вашого рішення) може впровадити "addEventListener" або "attachEvent", щоб вирішити його недолік у IE 8. І тоді ваш код припинить роботу.
— Зело Карлос

@RoyiNamir Це тести на IE8. Чому на землі він повинен повернути правду на IE11?
— Андреас

@Andreas на жаль. не бачив, що ОП хоче до I9. видалення.
— Рой Намір

114

Використовуйте умовні коментарі. Ви намагаєтесь виявити користувачів IE <9, і умовні коментарі працюватимуть у цих браузерах; в інших браузерах (IE> = 10 і не IE) коментарі будуть розглядатися як звичайні HTML-коментарі, якими вони є.

Приклад HTML:

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

Ви також можете це зробити виключно за допомогою сценарію, якщо вам потрібно:

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
Версія JavaScript відповіді @Tim Down для мене чудово працювала. Я використовував BrowserStack, щоб протестувати його з Windows 7 та IE 8, 9, 10 та 11; Mac OS X Snow Leopard з Safari 5.1, Firefox 28.0, Chrome 33.0 та Opera 20.0; iPhone 5 Mobile Safari; та Android Samsung Galaxy Tab 2 10.1 4.0. Як і очікувалося, лише IE8 повідомив, що це IeLessThan9. Приємно!
— Стів Сапорта

58

Щоб легко виявити MSIE (v6 - v7 - v8 - v9 - v10 - v11):

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

Корисно для виявлення IE10, оскільки він не підтримує умовних коментарів. Не працює в IE11, але, як правило, IE11 має нормальну поведінку
— personne3000

11
Нарешті, відповідь, що не читає лекції про використання функції виявлення функцій, і насправді відповідає на питання.
— cdmckay

32

Ось як AngularJS перевіряє IE

/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
var msie = document.documentMode;

if (msie < 9) {
    // code for IE < 9
}

Вау, це набагато простіше, ніж усі умовні коментарі! Без обмежень цього?
— andrewb

згідно з документами, IE8 + підтримує цю властивість, тому я думаю, що це повинно бути достатньо для більшості випадків.
— iurii

Згідно з посиланням MSDN, "Коли поточний документ ще не визначений, documentMode повертає значення нуля (0). Це зазвичай відбувається під час завантаження документа." Це означає, що ви не можете отримати дійсну відповідь у сценарії, завантаженому в <head>?
— Ерік Ноулз

Я думаю, ви можете виправити це, перевіривши значення на window.onload, коли документ уже завантажений.
— iurii

28

Для надійного фільтрування IE8 та старіших версій можна перевірити глобальні об'єкти :

if (document.all && !document.addEventListener) {
    alert('IE8 or lower');
}

2
document.all - Не підтримується в IE 11 - msdn.microsoft.com/en-us/library/ie/ms537434%28v=vs.85%29.aspx
— Раджа

2
@RajaKhoury - Це добре, якщо намагатися перевірити IE <9 - умова if буде помилковою.
— nnnnnn

19

Визначення версії IE за допомогою функції виявлення функцій (IE6 +, браузери до IE6 виявляються як 6, повертає нуль для веб-переглядачів, які не IE):

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

Редагувати: Я створив репортаж з bower / npm для вашої зручності: тобто-версія

Оновлення:

більш компактна версія може бути записана в один рядок у вигляді:

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

Ця функція поверне номер основної версії IE як ціле число або undefinedякщо браузер не є Internet Explorer. Це, як і всі рішення користувацьких агентів, піддається підробці агентів користувача (що є офіційною особливістю IE з версії 8).

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

Оуен, як це використовувати на практиці? Як можна отримати повернене значення? Я спробував console.log(!!match && parseInt(match[1])), console.log(parseInt(match[1]))і console.log(match), але ніякого результату ні з однією з них.
— Френк Конійн

Отримайте повернене значення, викликавши саму функцію getIEVersion(). Наприклад:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
— Оуен

15

Виявити IE в JS за допомогою умовних коментарів

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

Це майже те саме, що і моя відповідь.
— Tim Down

@TimDown: Можливо, але ця відповідь є трохи більш повною функцією (вона говорить вам номер версії), і вона добре коментується. Крім того, посилання на початку цієї відповіді веде до Суті з кількома інформативними коментарями та цікавими варіаціями щодо цієї методики.
— Алан

@Alan: Справедливі бали. Я підібрав моє питання, але не навів джерело.
— Тім Даун

12

Це працює для мене. Я використовую це як переспрямування на сторінку, яка пояснює, чому нам не подобається <IE9 та надає посилання на браузери, які ми віддаємо перевагу.

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
Ой, це гидко. Я використовую більш дружній метод, показую діва з виглядом попередження IE, і коли відвідувач натискає на нього, користувач переходить на Browsehappy.com
— Codebeat

10

Ваш код може зробити перевірку, але, як ви думали, якщо хтось спробує отримати доступ до вашої сторінки за допомогою IE v1 або> v19, помилка не отримає, тому може бути безпечніше зробити перевірку з виразом Regex, як цей код нижче:

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

Це не є гарною відповіддю. Нюхання UA - недостовірне. Більше про це тут: modernizr.com/docs
— Йезен Томас

3
@Jezen Іноді UA-нюхання - це шлях: github.com/Modernizr/Modernizr/isissue/538
— István Ujj-Mészáros

8

Умов IE вже не підтримується в IE версії 10, як зазначено на довідковій сторінці Microsoft .

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

тоді використовуйте:

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
Це було єдине, що працювало над цілою мережею, принаймні гумону речей, які я спробував ... thx;)
— Генрік С.

Цей код хороший, але не може виявити режим перегляду сумісності. Я в IE 11, використовуючи перегляд сумісності в IE 8, і цей код все ще дає version 11EDIT: Цей код дивовижний! ха-ха, це дає предмет із усім, що знаходиться всередині. Версія 11, але docModeIR дорівнює 9. Дякую!
— MarceloBarbosa

5

Для 10 і 11:

Ви можете використовувати js та додати клас у html для підтримки стандарту умовних коментарів :

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

Або використовуйте в'язку, подібну до баузера:

https://github.com/ded/bowser

Або модернізатор для виявлення функцій:

http://modernizr.com/


2
Я спробував кілька сценаріїв та рішень, але нічого не вийшло. Тоді я включив у проект баузер, і він просто працював. Отже, один за пропозицію боусера.
— Маульд

3

Щоб виявити Internet Explorer 10 | 11, ви можете використовувати цей маленький сценарій безпосередньо після тегу body:

У моєму випадку я використовую бібліотеку jQuery, завантажену в голову.

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

Мені подобається це спасибі, мені потрібно виявити лише 10 або 11, оскільки я не підтримую попередні версії
— Nearpoint

IE9 також тризуб, але не однаковий із підтримкою CSS. Ваша детекція вважає щонайменше 10, але це не правильно.
— Codebeat


2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

На думку Microsoft , наступне - найкраще рішення, воно також дуже просте:

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }
    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
      }
    alert( msg );
}

У самому справі, і тільки в разі , якщо хто -то в іншій землі тут намагається використовувати вище, код в більш пізньому відповіді робить роботу IE11 ( stackoverflow.com/a/26375930/1129926 ). Але будьте обережні, чи буде це працювати для IE12 тощо? Підсумок - найкраще вважати це тимчасовими хаками, і вони, швидше за все, вийдуть з ладу пізніше, коли вийдуть нові версії браузера (я навіть не згадую Edge).
— Джефф Мерглер

1

Я рекомендую не вдруге писати цей код. Я рекомендую вам використовувати бібліотеку Conditionizr ( http://conditionizr.com/ ), яка здатна тестувати конкретні версії IE, а також інші браузери, операційні системи та навіть наявність або відсутність дисплеїв Retina.

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

Він також добре поєднується з Modernizr, який може впоратися з усіма тими випадками, коли вам краще перевірити конкретні можливості, а не конкретний браузер.


1

Мені так подобається:

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

Цей підхід до виявлення IE поєднує в собі сильні сторони та дозволяє уникнути слабких сторін відповіді jKey, використовуючи умовні коментарі та відповідь Оуена за допомогою користувацьких агентів.

  • Підхід jKey працює до версії 9 та не піддається підробці агента користувача в IE 8 та 9.
  • Підхід Оуена може зазнати невдач у IE 5 та 6 (звітність 7) і сприйнятливий до підробки UA, але він може виявити версії IE> = 10 (зараз також включаючи 12, що розміщує відповідь Оуена).

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

Це можна використовувати для встановлення корисних класів для вашого документа, що містить версію IE:

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

Зауважте, що він виявляє використовуваний режим сумісності, якщо IE знаходиться в режимі сумісності. Також зауважте, що версія IE в основному корисна для старих версій (<10); більш високі версії відповідають стандартам і, ймовірно, краще замість цього перевірити наявність функцій, використовуючи щось на зразок modernizr.js.


1

Я зробив для цього зручний підкреслювальний міксин.

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

або просто

//   IE 10: ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 
//   IE 11: ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 
// Edge 12: ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 
// Edge 13: ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

Найбільш повний сценарій JS, який я знайшов для перевірки версій IE, це http://www.pinlady.net/PluginDetect/IE/ . Вся бібліотека знаходиться за адресою http://www.pinlady.net/PluginDetect/Browsers/ .

З IE10 умовні заяви більше не підтримуються.

З IE11, агент користувача більше не містить MSIE. Також використання агента користувача не є надійним, оскільки його можна змінити.

Використовуючи сценарій PluginDetect JS, ви можете виявити IE та виявити точні версії, використовуючи дуже специфічний і добре складений код, який націлений на конкретні версії IE. Це дуже корисно, коли ви точно переймаєтесь, з якою версією браузера ви працюєте.


0

Я усвідомлюю, що я трохи запізнююся на вечірку тут, але я перевіряв простий спосіб в одному рядку, щоб надати зворотній зв'язок щодо того, чи є браузер IE і яка версія з 10 внизу. Я не кодував це для версії 11, тому, можливо, для цього знадобиться невелика поправка.

Однак це код, він працює як об'єкт, який має властивість і метод, і покладається на виявлення об'єкта, а не на скребкування об'єкта навігатора (що в значній мірі є хибним, оскільки його можна підробити).

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

Використання - isIE.browserце властивість, яка повертає булевий і покладається на умовні коментарі, метод, isIE.detectedVersion()який повертає число від 5 до 10. Я висловлюю припущення, що все, що нижче 6, і ви на серйозній території старої школи, і ви будете чимось більш приємним, ніж один лайнер і все, що перевищує 10, і ви перебуваєте на новій території. Я прочитав щось про IE11, що не підтримує умовних коментарів, але я не до кінця дослідив, можливо, на більш пізню дату.

У будь-якому випадку, як є, так і для одного вкладиша, він буде охоплювати основи браузера IE та виявлення версій. Це далеко не ідеально, але він невеликий і легко змінюється.

Тільки для довідки, і якщо хтось має сумніви в тому, як реально реалізувати це, то наступне умовне має допомогти.

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

Виявлення IE та його версій не може бути простішим, і все, що вам потрібно, це трохи рідного / ванільного Javascript:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

І це спосіб його використовувати:

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

.

Працює у всіх версіях IE, включаючи більш високі версії з нижчим переглядом / режимом порівнянності, і documentModeє власником IE.


0

Якщо вам потрібно скасувати версію браузера IE, ви можете слідувати наведеному нижче коду. Цей код добре працює для версій IE6 до IE11

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                if (navigator.appName == 'Netscape') {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

Запуск вікон IE10 буде автоматично оновлений до IE11 + та буде стандартизованим W3C

Сьогодні нам не потрібно підтримувати IE8-

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

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