Как я могу обнаружить 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?

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

Вместо того, чтобы смотреть на навигатор.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; } 

Вот последний правильный способ, которым я знаю, как проверить 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

Я использую UAParser https://github.com/faisalman/ua-parser-js

 var a = new UAParser(); var name = a.getResult().browser.name; var version = a.getResult().browser.version; 

Тема немного устарела, но поскольку здесь скрипты обнаруживают 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); } 
 // detect IE8 and above, and Edge if (document.documentMode || /Edge/.test(navigator.userAgent)) { ... do something } 

Объяснение:

 document.documentMode 

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

 /Edge/ 

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

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

HTML:

 

You are not using a microsoft browser

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

Эта функция отлично работала для меня. Он также обнаруживает 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 */ } в вашем коде.

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

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

 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/

Вот class 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(); }; 

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

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

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