Виявлення Internet Explorer 11


125

Я знаю, що 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');

Хтось має про це уявлення?


@ Бобхін Я вже згадував про свою проблему. помилка отримання помилокObject not found and needs to be re-evaluated.
Miqdad Ali


можливий дублікат Як виявити IE11?
Пол 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:

як ви бачите тут, він повертає істину:

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

Що ми можемо зробити:

Судячи з усього, вони додали машинний біт простору:

тобто11:

"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"

тобто12:

"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 повернення хибне.
Рой Намір

1
@IanSteffy Це лише для показу результату (!) Операції. Ви можете відкрити файл HTML і додати тег сценарію та запустити команду всередині цього сценарію. Ось запустіть це .
Royi Namir

2
x64повертає Chrome і Edge
Gene R

3
Зачекайте, є IE12? Я подумав, що IE11 був останнім, і нам незабаром більше не доведеться турбуватися про цей дурний браузер! ☹
Майкл Шепер

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, але "Тризуб /" відображається набагато далі в рядку appVersion
chrismarx

22

Я використовую наступну функцію для виявлення версій 9, 10 та 11 IE:

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

Закриття та відкриття консолі працювало на мене. Дивна поведінка порівняно з Firefox або Chrome (але це IE, так що цифри.)
Ectropy

7

Досить безпечним і стислим способом виявити лише 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


Єдине робоче рішення (це найкоротше, найчистіше та найелегантніше)! Royi Namir також /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

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, старшого за 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

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.