Виявити версію 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.