Обнаружение Internet Explorer 11


126

Я знаю, что IE 11 имеет другую строку пользовательского агента, чем все другие IE

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

Я попытался обнаружить IE 11 с указанием ответа на этот вопрос '

Jquery не может обнаружить IE 11

Это !!navigator.userAgent.match(/Trident\/7\./)

Но я получаю ошибку Object not found and needs to be re-evaluated.

Затем я открыл консоль разработчика в IE11 и попытался получить доступ к некоторым предопределенным объектам javascript, но все равно получаю ту же ошибку.

я пытался

navigator.userAgent

window.navigator

console.log('test');

Кто-нибудь знает об этом?


@Bobkhin Я упомянул выше свою проблему. получение ошибкиObject not found and needs to be re-evaluated.
Miqdad Ali


возможный дубликат Как определить IE11?
Paul Sweatte

Ответы:


188

Изменить 18 ноября 2016

Этот код также работает ( для тех, кто предпочитает другое решение, без использования ActiveX )

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

Оригинальный ответ

Чтобы проверить Ie11, вы можете использовать это: (проверено)

(или запустите это )

!(window.ActiveXObject) && "ActiveXObject" in window

У меня все VMS IE:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Примечание: это не работает для IE11:

как вы можете видеть здесь, он возвращает true:

введите описание изображения здесь

Так что мы можем сделать :

Видимо добавили машинное битовое пространство:

ie11:

"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

ie12:

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

так что мы можем сделать:

/x64|x32/ig.test(window.navigator.userAgent)

это вернет истину только для ie11.


1
@Jan. да. только IE11 вернет истину для всего этого условия. Я только что показал, что <11 return false.
Рой Намир

1
@IanSteffy Это просто для того, чтобы показать результат (!) Операции. Вы можете открыть файл HTML, добавить тег сценария и запустить команду внутри этого сценария. Вот запустите это .
Рой Намир

2
x64возвращает и Chrome, и Edge
Gene R

3
Подождите, есть IE12? Я думал, что IE11 был последним, и что скоро нам больше не придется беспокоиться об этом дурацком браузере! ☹
Майкл Шепер 09

1
Кто не работает для моего IE 11.0.9600.19431 на Windows 7 Enterprise. Нет window.MSInputMethodContext.
Генрих Ульбрихт

105

Чтобы быстро обнаружить MSIE (с 6 по 11 версии):

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}

2
Если не второй indexOf()будет > -1?
реформирован

Да, я не знаю, почему это> 0, а не> -1, но «Trident /» в любом
случае

22

Я использую следующую функцию для обнаружения IE версий 9, 10 и 11:

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  

21

Все приведенные выше ответы игнорируют тот факт, что вы упоминаете, что у вас нет окна или навигатора :-)

Затем я открываю консоль разработчика в IE11

и вот где он говорит

Объект не найден и требует повторной оценки.

и навигатор, окно, консоль, ни один из них не существует и требует повторной оценки. У меня было это в эмуляции. просто закройте и откройте консоль несколько раз.


5
Боже милостивый, СПАСИБО, что действительно прочитали вопрос и ответили на проблему с переоценкой.
marknadal

8
У меня тоже сработало. Вот почему после смерти IE по всему миру будут устраивать вечеринки.
voltrevo 03

У меня работало закрытие и открытие консоли. Странное поведение по сравнению с Firefox или Chrome (но это IE, так что цифры.)
Ectropy

8

Достаточно безопасный и лаконичный способ обнаружить только IE 11 -

if(window.msCrypto) { /* I'm IE11 for sure */ }

или что-то вроде этого
var IE11= !!window.msCrypto;


msCryptoявляется версией window.cryptoобъекта с префиксом и реализована только в IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


Единственное рабочее решение (самое короткое, чистое и элегантное)! Рой Намир /x64|x32/ig.test(window.navigator.userAgent)относится и к Firefox!
Шандор Зуболи,

4

И как я это реализовал

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>

1
Я думаю у вас опечатка в вашей функции. Сначала вы выполняете проверку состояния, которая не используется. Во-вторых, возможно, вы имеете в виду && "ActiveXObject" in window. В-третьих: в чем фокус с двойным отрицанием !!?
dma_k 09

1
!! в значительной степени означает «Принуждение к логическому».
Эндрю Грей

4

Хорошо, попробуйте это, просто и для IE11 и IE ниже 11 версии

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1для версии IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1для версии IE ниже 11

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)


2

Эта ссылка была полезной . Он содержит код javascript для обнаружения всех версий IE до IE11. Я тестировал скрипт с эмулятором IE11. Чтобы найти эмулятор IE11, щелкните правой кнопкой мыши в веб-браузере и выберите «Проверить элемент». В левом нижнем углу страницы прокрутите панель навигации вниз и щелкните значок на рабочем столе. Выпадающий список «Строка пользовательского агента» содержит параметры для эмуляции IE6-11.

Оно работает. Я просто использовал его за несколько минут до написания этого ответа. Не могу публиковать снимки - недостаточно репутации.


Это код - перейдите по ссылке, чтобы просмотреть его еще раз:

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * 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;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>


1

Использование этого RegExp, похоже, работает для IE 10 и IE 11:

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

У меня нет IE старше 10, чтобы проверить это.


0

Используйте навигатор: -

Это navigatorобъект, который содержит всю информацию о браузере клиентского компьютера.

navigator.appName возвращает имя браузера клиентской машины.

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
appName - это Netscape в IE 11. Они сделали все, что могли, чтобы обмануть разработчиков.
kagronick 07

0

Я обнаружил, что IE11 предоставляет несколько строк пользовательского агента в разных средах.

Вместо того, чтобы полагаться на MSIEи другие подходы, лучше полагаться на Tridentверсию

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

Надеюсь это поможет :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.