Как я могу обнаружить Internet Explorer (IE) и Microsoft Edge с помощью JavaScript?

Я много осмотрелся и понял, что есть много способов обнаружить Internet Explorer.

Моя проблема заключается в следующем: у меня есть область в моем HTML-документе, которая при нажатии вызывает функцию JavaScript, которая несовместима с каким-либо видом Internet Explorer. Я хочу определить, используется ли IE, и если да, установить для переменной значение true.

Проблема в том, что я пишу свой код из Notepad++, и когда я запускаю HTML-код в браузере, ни один из методов обнаружения IE не работает. Я думаю, что проблема в том, что я запускаю его из Notepad++. Мне нужно иметь возможность обнаруживать IE, чтобы на основании этой переменной я мог отключить эту область сайта. Я пробовал это:

var isIE10 = false;

if (navigator.userAgent.indexOf("MSIE 10") > -1) {
    // this is internet explorer 10
    isIE10 = true;
   window.alert(isIE10);
}

var isIE = (navigator.userAgent.indexOf("MSIE") != -1);

if(isIE){
    if(!isIE10){
    window.location = 'pages/core/ie.htm';
    }
}

но это не работает. Как я могу обнаружить IE из Notepad++? Это то, из чего я тестирую HTML, но мне нужен метод, который будет работать с этим.

редактировать

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

Правка № 2

Есть ли способ обнаружить браузер Microsoft Edge?

Ответ 1

Я не знаю почему, но я не вижу "Edge" в userAgent, как говорят все остальные, поэтому мне пришлось пройти еще один маршрут, который может помочь некоторым людям.

Вместо того, чтобы смотреть на navigator.userAgent, я смотрел на navigator.appName, чтобы отличить, было ли это IE <= 10 или IE11 и Edge. IE11 и Edge используют имя приложения "Netscape", а в любой другой итерации используется "Microsoft Internet Explorer".

После того, как мы определим, что браузер - это IE11 или Edge, я затем посмотрел на navigator.appVersion. Я заметил, что в IE11 строка была довольно длинной с большим количеством информации внутри нее. Я произвольно выбрал слово "Trident", которое определенно не находится в navigator.appVersion для Edge. Тестирование этого слова позволило мне отличить два.

Ниже приведена функция, которая вернет числовое значение, на которое пользователь Internet Explorer включен. Если на Microsoft Edge возвращается номер 12.

Удачи, и я надеюсь, что это поможет!

function Check_Version(){
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer'){

       var ua = navigator.userAgent,
           re  = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");

       if (re.exec(ua) !== null){
         rv = parseFloat( RegExp.$1 );
       }
    }
    else if(navigator.appName == "Netscape"){                       
       /// in IE 11 the navigator.appVersion says 'trident'
       /// in Edge the navigator.appVersion does not say trident
       if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
       else rv = 11;
    }       

    return rv;          
}

Ответ 2

Вот последний правильный способ, которым я знаю, как проверить IE и Edge:

if (/MSIE 10/i.test(navigator.userAgent)) {
   // This is internet explorer 10
   window.alert('isIE10');
}

if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
    // This is internet explorer 9 or 11
    window.location = 'pages/core/ie.htm';
}

if (/Edge\/\d./i.test(navigator.userAgent)){
   // This is Microsoft Edge
   window.alert('Microsoft Edge');
}

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

Также проверьте эту страницу для последних строк агента пользователя IE и Edge, потому что этот ответ может устареть в какой-то момент: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx

Ответ 3

// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

Пояснение:

document.documentMode

Единственное свойство IE, впервые доступное в IE8.

/Edge/

Регулярное выражение для поиска строки "Edge", которое мы затем проверяем с помощью свойства "navigator.userAgent"

Ответ 5

Тема немного устарела, но поскольку здесь скрипты обнаруживают Firefox как ложный положительный (EDGE v12), вот версия, которую я использую:

function isIEorEDGE(){
  if (navigator.appName == 'Microsoft Internet Explorer'){
    return true; // IE
  }
  else if(navigator.appName == "Netscape"){                       
     return navigator.appVersion.indexOf('Edge') > -1; // EDGE
  }       

  return false;
}

который, конечно, может быть написан более кратким образом:

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1);
}

Ответ 6

Эта функция отлично работала для меня. Он также обнаруживает Edge.

Первоначально из этого Codepen:

https://codepen.io/gapcode/pen/vEJNZN

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // 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 (Spartan)
  // 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 msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}

Затем вы можете использовать if (detectIE()) { /* do IE stuff */ } в своем коде.

Ответ 7

Если вы просто хотите, чтобы пользователи, использующие браузер MS, предупреждали или что-то еще, этот код должен быть хорошим.

HTML:

<p id="IE">You are not using a microsoft browser</p>

JavaScript:

using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);

if (using_ms_browser == true){
    document.getElementById('IE').innerHTML = "You are using a MS browser"
}

Благодаря @GavinoGrifoni

Ответ 8

Для меня это лучше:

var uA = window.navigator.userAgent,
    onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
    checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;

Go run: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/

Ответ 9

Используйте этот снимок: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

Ответ 10

Вот класс javascript, который определяет IE10, IE11 и Edge.
Объект Navigator вводится для целей тестирования.

var DeviceHelper = function (_navigator) {
    this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
    if(!this.navigator.userAgent) {
        return false;
    }

    var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
        IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
    return IE10 || IE11;
};

DeviceHelper.prototype.isEdge = function() {
    return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};

DeviceHelper.prototype.isMicrosoftBrowser = function() {
    return this.isEdge() || this.isIE();
};

Ответ 11

Однострочный код для определения браузера.

Если браузер IE или Edge, он вернет true;

let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)

Ответ 12

Прежде всего, это не проблема Notepad ++. Его " проблема со строкой"

Общая строка во всей версии IE MSIE Проверьте различные строки userAgent на http://www.useragentstring.com/pages/Internet%20Explorer/

if(navigator.userAgent.indexOf("MSIE") != -1){
   alert('I am Internet Explorer!!');
}