Определить версию IE (до v9) в JavaScript

Я хочу, чтобы пользователи нашего веб-сайта отображали страницу с ошибкой, если они используют версию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
    }
}

Этот код поможет?

Чтобы избежать нескольких комментариев, которые, вероятно, будут встречаться у меня:

Yes, I know that users can forge their useragent string. I'm not concerned. Yes, I know that programming pros prefer sniffing out feature-support instead of browser-type but I don't feel this approach makes sense in this case. I already know that all (relevant) non-IE browsers support the features that I need and that all pre-v9 IE browsers don't. Checking feature by feature throughout the site would be a waste. Yes, I know that someone trying to access the site using IE v1 (or >= 20) wouldn't get 'badBrowser' set to true and the warning page wouldn't be displayed properly. That's a risk we're willing to take. Yes, I know that Microsoft has "conditional comments" that can be used for precise browser version detection. IE no longer supports conditional comments as of IE 10, rendering this approach absolutely useless.

Любые другие очевидные проблемы, о которых нужно знать?

 blong18 дек. 2012 г., 20:51
Официальная документация, в которой говорится, что IE10 + не поддерживает условные комментарии:blogs.msdn.com/b/ie/archive/2011/07/06/… - Благодаря:stackoverflow.com/a/9900331/320399
 Andreas10 июн. 2012 г., 00:56
Условные комментарии - это просто нормальные комментарии. Только IE интерпретирует их как специальные. IE10 + больше не будет этого делать.
 Hassan10 июн. 2012 г., 00:15
"Это просто не стоит нашего времени и денег, чтобы поддержать IE pre-v9". Я хотел бы сделать это.
 Tim Down10 июн. 2012 г., 01:00
IE 10 будет обрабатывать условные комментарии точно так же, как и браузеры без IE. Они являются действительными HTML-комментариями, поэтому будут рассматриваться как таковые. Я согласен с Андреасом и считаю, что условные комментарии - это путь.
 amelvin10 июн. 2012 г., 00:21
Исходя из пункта [2], я не буду предлагать Modernizr (en.wikipedia.org/wiki/Modernizr) - каждый должен где-то нарисовать линию на песке - но IE9 действительно кажется высокой линией

Ответы на вопрос(29)

илиundefined если браузер не является Internet Explorer. Это, как и все решения пользовательских агентов, допускает подделку пользовательских агентов (которая была официальной функцией IE начиная с версии 8).

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}
 22 мая 2014 г., 06:55
Оуэн, как можно использовать это на практике? Как получить возвращаемое значение? Я старалсяconsole.log(!!match && parseInt(match[1])), console.log(parseInt(match[1])) а такжеconsole.log(match), но без результата ни с одним из них.
 23 мая 2014 г., 12:08
Получить возвращаемое значение, вызвав саму функциюgetIEVersion(), Например:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}

!!navigator.userAgent.match(/msie\s[5-8]/i)
 17 янв. 2017 г., 01:24
@alessadro - Но ведь так и должно быть? OP хотел проверить & lt; 9 ...
 17 февр. 2016 г., 17:44
Кроме того, вот песочница, показывающая шаблон регулярных выражений для наиболее распространенных строк пользовательского агента IE:regex101.com/r/lC6oP3/1
 14 янв. 2017 г., 21:13
Этот код возвращаетсяfalse на 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>

http://www.pinlady.net/PluginDetect/IE/, Вся библиотека находится наhttp://www.pinlady.net/PluginDetect/Browsers/.

В IE10 условные операторы больше не поддерживаются.

В IE11 пользовательский агент больше не содержит MSIE. Кроме того, использование пользовательского агента ненадежно, поскольку его можно изменить.

Используя JS-скрипт PluginDetect, вы можете обнаружить IE и определить точные версии, используя очень специфичный и тщательно разработанный код, предназначенный для конкретных версий IE. Это очень полезно, когда вам важно, с какой версией браузера вы работаете.

проверки для 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
}
 24 июл. 2015 г., 03:24
Ого, это намного проще, чем все условные комментарии! Нет ограничений этого?
 24 июл. 2015 г., 08:26
Согласно документам, IE8 + поддерживает это свойство, поэтому я думаю, что этого должно быть достаточно для большинства случаев.
 30 июл. 2015 г., 20:27
Я думаю, что вы можете это исправить, проверив значение в window.onload, когда документ уже загружен.
 30 июл. 2015 г., 18:22
Согласно справочнику MSDN, «когда текущий документ еще не определен, documentMode возвращает значение ноль (0). Обычно это происходит при загрузке документа. & Quot; Означает ли это, что вы не можете получить действительный ответ в скрипте, загруженном в & lt; head & gt ;?

//   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]

которая объясняет, почему нам не нравится & lt; IE9 и предоставить ссылки на браузеры, которые мы предпочитаем.

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->
 08 апр. 2015 г., 01:56
Ох, это противно. Я использую более дружественный метод, отображаю div с видом предупреждения IE, и когда посетитель нажимает на него, пользователь переходит кbrowsehappy.com
if (!document.addEventListener) {
    // ie8
} else if (!window.btoa) {
    // ie9
}
// others

Определить 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;

}());
 21 авг. 2013 г., 19:49
Это почти совпадает с моим ответом.
 10 янв. 2014 г., 10:34
@ Алан: Ярмарка очков. Я адаптировал свой вопрос к этому, но не привел источник.
 10 янв. 2014 г., 02:16
@TimDown: Возможно, но этот ответ немного более функциональный (он сообщает вам номер версии) и хорошо прокомментирован. Кроме того, ссылка в начале этого ответа приводит к Gist с несколькими информативными комментариями и интересными вариациями этой техники.

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}
 13 дек. 2013 г., 16:08
Полезно для обнаружения IE10, так как он не поддерживает условные комментарии. Не работает в IE11, но IE11 обычно работает нормально
 30 июл. 2014 г., 01:45
Наконец, ответ, который не содержит лекций об использовании функции обнаружения и фактически отвечает на вопрос.
 06 янв. 2014 г., 15:13
Я редактирую свой ответ для поддержки IE10 и IE11.

бежать недостатков ответа jKey с использованием условных комментариев и ответа Оуэна с использованием пользовательских агентов.

jKey's approach works up to version 9 and immune to user agent spoofing in IE 8 & 9.

Owen's approach can fail on IE 5 & 6 (reporting 7) and is susceptible to UA spoofing, but it can detect IE versions >= 10 (now also including 12, which postdates Owen's answer).

// ----------------------------------------------------------
// 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 в основном полезна для более старых версий (& lt; 10); более высокие версии более совместимы со стандартами, и, вероятно, вместо этого лучше проверять функции, используя что-то вроде modernizr.js.

Вы можете использовать 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";
  }

Или используйте lib как bowser:

https://github.com/ded/bowser

Или модернизр для обнаружения функций:

http://modernizr.com/

 19 янв. 2015 г., 13:37
Я пробовал несколько сценариев и решений, но ничего не получалось. Затем я включил Bowser в проект, и он просто сработал. Так что один за предложение Bowser.

If you need to delect IE Browser version then you can follow below code. This code working well for version IE6 to IE11

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.
<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo">

<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>

но, как вы и думали, если кто-то попытается получить доступ к вашей странице с помощью IE v1 или & gt; 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
}
 10 июн. 2012 г., 00:42
Это не хороший ответ. UA-сниффинг ненадежен. Подробнее об этом здесь:modernizr.com/docs
 05 мар. 2013 г., 21:20
@Jezen Иногда UA-сниффинг - это путь:github.com/Modernizr/Modernizr/issues/538

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

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

Он также прекрасно сочетается с Modernizr, который может обрабатывать все те случаи, когда вам лучше тестировать определенные возможности, а не конкретный браузер.

и все, что вам нужно, это немного нативный / ванильный 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, включая более высокие версии в более низком режиме совместимости View / Mode, иdocumentMode является собственностью IE.

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
}
Решение Вопроса

римечание: условные операторы поддерживаются только в IE5 - 9.)

Сначала настройте свои классы ie правильно

<!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));

БлагодаряПол Ирландский.

 22 июн. 2016 г., 10:29
Я получаю сообщение об ошибке на W3 HTML валидатор:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
 13 янв. 2015 г., 11:53
Принимая во внимание тот факт, что ОП запросил чисто JavaScript-решение, я считаю, что ответ @Tim Down ниже лучше, так как он не включает изменение существующего HTML, плюс он не использует jQuery:stackoverflow.com/a/10965203/134120

браузеры до 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 для вашего удобства:т.е.-версия

Update:

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

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;
 30 сент. 2018 г., 14:28
@FrankFang см обновленный ответ
 12 янв. 2015 г., 19:21
перейти по ссылке ...
 12 янв. 2015 г., 02:49
Это то, что я ищу, спасибо. Но как определить IE 6?
 12 окт. 2018 г., 03:38
хорошо, спасибо за тебя

как указано вСправочная страница 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("/*@[email protected]*/!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))
{

}
 11 февр. 2015 г., 18:42
Этот код хорош, но не может определить режим просмотра совместимости. Я в IE 11 использую представление совместимости в IE 8, и этот код все еще даетversion 11 РЕДАКТИРОВАТЬ: Этот код удивительный! ха-ха, это дает объект со всем внутри. Версия 11, но docModeIR равен 9. Спасибо!
 10 дек. 2014 г., 13:28
Это было единственное, что работало во всей сети, по крайней мере, огромное количество вещей, которые я пробовал ... спасибо;)

что немного опоздал на вечеринку здесь, но я искал простой однострочный способ предоставить обратную связь о том, является ли браузер IE и какая версия была от 10 ниже. Я не кодировал это для версии 11, так что, возможно, для этого потребуется небольшая поправка.

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

var isIE = { browser:/*@[email protected]*/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:/*@[email protected]*/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());
}

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 );
}
 02 апр. 2018 г., 23:17
В самом деле, и на тот случай, если кто-то еще приземлится здесь, пытаясь использовать вышеизложенное, код в следующем ответе действительно работает для IE11 (stackoverflow.com/a/26375930/1129926). Но будьте осторожны, он будет работать для IE12 и т. Д.? Суть в том, что лучше всего рассматривать их как временные хаки, и они могут потерпеть неудачу позже, когда будут выпущены новые версии браузера (я даже не упомянул Edge).
 30 апр. 2015 г., 10:49
Не работает для IE11. Я знаю, что это старый ответ.

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
}
 04 июл. 2013 г., 14:22
Не работает для 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"
 08 сент. 2013 г., 12:53
Обратите внимание, что в FF & quot; false & lt; 9 & Quot; является "верным". Итак, условие должно бытьif (isIE () && isIE () < 9) {
 19 нояб. 2013 г., 23:35
@DeadlyChambers, возможно, он работал в режиме стандартов IE7?msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 09 июн. 2017 г., 05:58
@PrasadGayan - Microsoft Edge не является Internet Explorer. Поэтому возвращение false кажется правильным для этого.
 06 янв. 2015 г., 22:56
Утвержденный ответ - как определить версию IE в HTML. Это отвечает на оригинальный вопрос.

проверка глобальных объектов может быть использован:

if (document.all && !document.addEventListener) {
    alert('IE8 or lower');
}
 17 янв. 2017 г., 01:16
@RajaKhoury - это нормально, если вы пытаетесь проверить IE
 13 апр. 2015 г., 01:41
document.all - не поддерживается в IE 11 -msdn.microsoft.com/en-us/library/ie/ms537434%28v=vs.85%29.aspx

маленький скрипт сразу после тега 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>
 08 апр. 2015 г., 02:47
IE9 также трезубец, но не то же самое с поддержкой CSS. Ваше обнаружение считает, что по меньшей мере 10, но это неверно.
 08 сент. 2014 г., 01:29
Мне нравится это спасибо, мне нужно только обнаружить 10 или 11, так как я не поддерживаю предыдущие версии

<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>

_.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>

й IE & lt; 9 и условные комментарии будут работать в этих браузерах; в других браузерах (IE & gt; = 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");
}
 27 мар. 2014 г., 21:52
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. Ницца!
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

Ваш ответ на вопрос