Как я могу обнаружить 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?
11 ответов
Я не знаю почему, но я не вижу "Edge" в userAgent, как все остальные говорят, поэтому мне пришлось пойти другим путем, который может помочь некоторым людям.
Вместо того чтобы смотреть на navigator.userAgent, я посмотрел на navigator.appName, чтобы определить, был ли это IE<=10 или IE11 и Edge. IE11 и Edge используют appName "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
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
... do something
}
Объяснение:
document.documentMode
Свойство только для IE, впервые доступное в IE8.
/Edge/
Регулярное выражение для поиска строки "Edge", которое мы затем проверяем по свойству navigator.userAgent
Я использую 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);
}
Эта функция отлично сработала для меня. Он также обнаруживает 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 */ }
в вашем коде.
Если вы просто хотите дать пользователям, использующим браузер 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
Для меня лучше это:
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;
Иди, беги: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
Используйте этот фрагмент: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
Однострочный код для обнаружения браузера.
Если браузер IE или Edge, он вернет true;
let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
Если нам нужно проверить Edge, пожалуйста, приступайте к этому
if(navigator.userAgent.indexOf("Edge")> 1) {
//do something
}
Вот класс 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!!');
}