Как я могу обнаружить 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, но мне нужен метод, который будет работать с этим.
edit
Я заметил, что кто-то пометил это как дубликат, и это понятно. Я предположим, я не был ясен. Я не могу использовать ответ JQuery, поэтому это не дубликат, поскольку я прошу ответ vanilla JS.
Edit #2
есть ли также способ обнаружить браузер Microsoft Edge?
11 ответов:
Я не знаю, почему, но я не вижу "края" в userAgent, как все остальные говорят, поэтому мне пришлось выбрать другой маршрут, который может помочь некоторым людям.
вместо того чтобы смотреть на навигатор.userAgent, я посмотрел на навигатора.имя приложения, чтобы отличить, если это был IE
после того, как мы определим, что браузер является либо IE11, либо Edge, I потом посмотрел на штурмана.appVersion. Я заметил, что в IE11 строка была довольно длинной с большим количеством информации внутри нее. Я произвольно выбрал слово "трезубец", которого точно нет в навигаторе.appVersion для края. Проверка на это слово позволила мне отличить одно от другого.
Ниже приведена функция, которая возвращает числовое значение, в котором находится 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. ); } } 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 user agent, потому что этот ответ может устареть в какой-то момент: 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:
<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
эта функция отлично работала для меня. Он также обнаруживает край.
первоначально из этого 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 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/
вот класс javascript, который обнаруживает IE10, IE11 и Edge.
Объект навигатора вводится для целей тестирования.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!!'); }
Comments