Wykrywanie przeglądarki Internet Explorer 11

125

Wiem, że IE 11 ma inny ciąg agenta użytkownika niż wszystkie inne IE

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

Próbowałem wykryć IE 11 z odpowiedzią określoną na to pytanie '

Jquery nie wykrywa IE 11

To jest !!navigator.userAgent.match(/Trident\/7\./)

Ale otrzymuję błąd Object not found and needs to be re-evaluated.

Następnie otworzyłem konsolę programisty w IE11 i próbowałem uzyskać dostęp do niektórych predefiniowanych obiektów javascript, nadal otrzymuję ten sam błąd.

próbowałem

navigator.userAgent

window.navigator

console.log('test');

Czy ktoś ma o tym pojęcie?

Miqdad Ali
źródło
@Bobkhin Wspomniałem powyżej o moim problemie. otrzymywanie błęduObject not found and needs to be re-evaluated.
Miqdad Ali
możliwy duplikat Jak wykryć IE11?
Paul Sweatte,

Odpowiedzi:

188

Edycja 18 listopada 2016

Ten kod również działa ( dla tych, którzy wolą inne rozwiązanie, bez użycia ActiveX )

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

Oryginalna odpowiedź

Aby sprawdzić Ie11, możesz użyć tego: (testowane)

(lub uruchom to )

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

Mam wszystkie VMS IE:

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Uwaga: to nie zadziała dla IE11:

jak widać tutaj, zwraca prawdę:

wprowadź opis obrazu tutaj

Więc co możemy zrobić :

Najwyraźniej dodali przestrzeń bitową maszyny:

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"

więc możemy zrobić:

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

to zwróci prawdę tylko dla ie11.

Royi Namir
źródło
1
@Jan. tak. tylko IE11 zwróci prawdę dla tego całego warunku. Właśnie pokazałem, że <11 zwraca fałsz.
Royi Namir
1
@IanSteffy To jest tylko po to, aby pokazać wynik (!) Operacji. Możesz otworzyć plik HTML i dodać znacznik skryptu i uruchomić polecenie w tym skrypcie. Tutaj, uruchom to .
Royi Namir
2
x64zwraca zarówno Chrome, jak i Edge
Gene R
3
Czekaj, jest IE12? Myślałem, że IE11 jest ostatnią i wkrótce nie będziemy musieli się już martwić o tę głupią przeglądarkę! ☹
Michael
1
Czy nie działa dla mojego IE 11.0.9600.19431 na Windows 7 Enterprise. Nie ma window.MSInputMethodContext.
Heinrich Ulbricht
105

Aby szybko wykryć MSIE (od wersji 6 do 11):

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
EpokK
źródło
2
Czy nie powinien indexOf()być drugi > -1?
zreformowany
Tak, nie wiem, dlaczego jest> 0, a nie> -1, ale „Trident /” i tak pojawia się znacznie dalej w ciągu appVersion-
chrismarx
22

Używam następującej funkcji do wykrywania wersji 9, 10 i 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
}  
KennyE
źródło
21

Wszystkie powyższe odpowiedzi ignorują fakt, że wspominasz, że nie masz okna ani nawigatora :-)

Następnie otworzyłem konsolę programisty w IE11

i tam jest napisane

Nie znaleziono obiektu i należy go ponownie ocenić.

i nawigator, okno, konsola, żadne z nich nie istnieje i musi zostać ponownie ocenione. Miałem to na emulacji. wystarczy kilka razy zamknąć i otworzyć konsolę.

pospolity
źródło
5
dobroć łaskawy DZIĘKUJĘ za przeczytanie pytania i udzielenie odpowiedzi na problem poprzez ponowną ocenę.
marknadal
8
Dla mnie też zadziałało. Dlatego po śmierci IE na całym świecie będą imprezować.
voltrevo
Zamykanie i otwieranie konsoli działało dla mnie. Dziwne zachowanie w porównaniu z Firefoksem lub Chrome (ale to IE, więc to się
liczy
7

Całkiem bezpiecznym i zwięzłym sposobem wykrywania tylko IE 11 jest

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

lub coś w tym stylu
var IE11= !!window.msCrypto;


msCryptojest wersją window.cryptoobiektu z prefiksem i zaimplementowaną tylko w IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

jj
źródło
Jedyne działające rozwiązanie (najkrótsze, najczystsze i najbardziej eleganckie)! Royi Namir /x64|x32/ig.test(window.navigator.userAgent)dotyczy również Firefoksa!
Sándor Zuboly
4

I jak to wdrożyłem

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Miqdad Ali
źródło
1
Myślę, że masz literówkę w swojej funkcji. Najpierw sprawdź stan, który nie jest używany. Po drugie, może masz na myśli && "ActiveXObject" in window. Po trzecie: co to za sztuczka z podwójną negacją !!?
dma_k,
1
!! właściwie oznacza „Zmuszaj do wartości logicznej”.
Andrew Gray
4

Okay, spróbuj tego, prostego i dla IE11 i IE poniżej 11 wersji

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1dla wersji IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1dla wersji IE poniżej 11

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

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

Dupinder Singh
źródło
2

Ten link był pomocny . Zawiera kod javascript do wykrywania wszystkich wersji IE do IE11. Testowałem skrypt z emulatorem IE11. Aby znaleźć emulator IE11, kliknij prawym przyciskiem myszy w przeglądarce internetowej i kliknij „Sprawdź element”. Przewiń pasek nawigacji w lewym dolnym rogu strony i kliknij ikonę na pulpicie. Lista rozwijana „Ciąg agenta użytkownika” zawiera opcje emulacji IE6-11.

To działa. Użyłem go kilka minut przed napisaniem tej odpowiedzi. Nie można publikować migawek - za mało reputacji.


To jest kod - kliknij łącze, aby wyświetlić go ponownie:

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

aghwotu
źródło
1

Używanie tego RegExp wydaje się działać dla IE 10 i IE 11:

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

Nie mam IE starszego niż IE 10, aby to przetestować.

antoineMoPa
źródło
0

Użyj Nawigatora: -

navigatorJest obiektem, który zawiera wszystkie informacje o przeglądarce urządzenia klienckiego.

navigator.appName zwraca nazwę przeglądarki komputera klienta.

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>

Parth Raval
źródło
1
appName to Netscape w IE 11. Zrobili wszystko, co w ich mocy, aby oszukać programistów.
kagronick
0

Odkryłem, że IE11 podaje więcej niż jeden ciąg znaków agenta użytkownika w różnych środowiskach.

Zamiast polegać na MSIEi innych podejściach, lepiej polegać na Tridentwersji

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

Mam nadzieję że to pomoże :)

Pan 7
źródło