Internet Explorer 11-Erkennung

124

Ich weiß, dass IE 11 eine andere Benutzeragentenzeichenfolge hat als alle anderen IE

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

Ich habe versucht, IE 11 mit der für diese Frage angegebenen Antwort zu erkennen. '

Jquery erkennt IE 11 nicht

Das ist !!navigator.userAgent.match(/Trident\/7\./)

Aber ich bekomme Fehler Object not found and needs to be re-evaluated.

Dann habe ich die Entwicklerkonsole in IE11 geöffnet und versucht, auf einige vordefinierte Javascript-Objekte zuzugreifen. Ich erhalte immer noch den gleichen Fehler.

Ich habe versucht

navigator.userAgent

window.navigator

console.log('test');

Hat jemand eine Idee davon?

Miqdad Ali
quelle
@ Bobkhin Ich habe oben mein Problem erwähnt. Fehler bekommenObject not found and needs to be re-evaluated.
Miqdad Ali
Mögliches Duplikat von Wie man IE 11 mit Javascript in Asp.net erkennt
RandomSeed
mögliches Duplikat von Wie erkennt man IE11?
Paul Sweatte

Antworten:

188

Bearbeiten 18 Nov 2016

Dieser Code funktioniert auch ( für diejenigen, die eine andere Lösung bevorzugen, ohne ActiveX zu verwenden )

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

Ursprüngliche Antwort

Um Ie11 zu überprüfen, können Sie Folgendes verwenden: (getestet)

(oder führen Sie dies aus )

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

Ich habe alle VMS von IE:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Hinweis: Dies funktioniert nicht für IE11:

Wie Sie hier sehen können, gibt es true zurück:

Geben Sie hier die Bildbeschreibung ein

Also was können wir tun :

Anscheinend haben sie den Maschinenbitraum hinzugefügt:

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"

so können wir tun:

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

Dies wird nur für ie11 true zurückgeben.

Royi Namir
quelle
1
@ Jan. Ja. Nur IE11 würde für diese gesamte Bedingung true zurückgeben. Ich habe gerade gezeigt, dass <11 false zurückgibt.
Royi Namir
1
@IanSteffy Dies dient nur zur Anzeige des Ergebnisses (!) Der Operation. Sie können eine HTML-Datei öffnen, ein Skript-Tag hinzufügen und den Befehl in diesem Skript ausführen. Hier läuft das .
Royi Namir
2
x64gibt sowohl Chrome als auch Edge zurück
Gene R
3
Warten Sie, es gibt einen IE12? Ich dachte, IE11 wäre der letzte und wir müssen uns bald keine Sorgen mehr um diesen dummen Browser machen! ☹
Michael Scheper
1
Funktioniert nicht für meinen IE 11.0.9600.19431 unter Windows 7 Enterprise. Es gibt keine window.MSInputMethodContext.
Heinrich Ulbricht
104

So erkennen Sie MSIE (von Version 6 bis 11) schnell:

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
EpokK
quelle
2
Sollte der zweite nicht indexOf()sein > -1?
reformiert
Ja, ich weiß nicht, warum es> 0 und nicht> -1 ist, aber "Trident /" taucht sowieso viel weiter in der AppVersion-Zeichenfolge auf
Chrismarx
22

Ich benutze die folgende Funktion, um Version 9, 10 und 11 von IE zu erkennen:

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
quelle
21

Alle obigen Antworten ignorieren die Tatsache, dass Sie erwähnen, dass Sie kein Fenster oder keinen Navigator haben :-)

Dann öffne ich die Entwicklerkonsole in IE11

und dort steht es

Objekt nicht gefunden und muss neu bewertet werden.

und Navigator, Fenster, Konsole, keiner von ihnen existiert und muss neu bewertet werden. Ich habe das in Emulation gehabt. Schließen und öffnen Sie die Konsole einige Male.

Commonpike
quelle
5
Meine Güte, danke, dass Sie die Frage tatsächlich gelesen und das Problem mit einer Neubewertung beantwortet haben.
Marknadal
8
Hat auch für mich gearbeitet. Aus diesem Grund wird es weltweit Partys geben, wenn der Internet Explorer stirbt.
Voltrevo
Das Schließen und Öffnen der Konsole hat bei mir funktioniert. Seltsames Verhalten im Vergleich zu Firefox oder Chrome (aber es ist IE, so dass Zahlen.)
Ectropy
6

Eine ziemlich sichere und präzise Möglichkeit, nur IE 11 zu erkennen, ist

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

oder sowas
var IE11= !!window.msCrypto;


msCryptoist eine vorangestellte Version des window.cryptoObjekts und nur in IE 11 implementiert.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

jj
quelle
Die einzige funktionierende Lösung (das ist die kürzeste, sauberste und eleganteste)! Royi Namirs /x64|x32/ig.test(window.navigator.userAgent)gilt auch für Firefox!
Sándor Zuboly
4

Und wie ich das umgesetzt habe

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Miqdad Ali
quelle
1
Ich denke, Sie haben einen Tippfehler in Ihrer Funktion. Zunächst führen Sie die Bedingungsprüfung durch, die nicht verwendet wird. Zweitens meinst du vielleicht && "ActiveXObject" in window. Drittens: Was ist der Trick mit doppelter Negation !!?
dma_k
1
!! bedeutet so ziemlich "Zwang zum Booleschen".
Andrew Gray
4

Okay, versuchen Sie dies einfach und für IE11 und IE unter 11 Version

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1für IE 11 Version navigator.userAgent.toUpperCase().indexOf("MSIE") != -1für IE unter 11 Version

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

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

Dupinder Singh
quelle
2

Dieser Link war hilfreich . Es enthält den Javascript-Code zum Erkennen aller Versionen von IE bis IE11. Ich habe das Skript mit dem IE11-Emulator getestet. Um den IE11-Emulator zu finden, klicken Sie mit der rechten Maustaste auf den Webbrowser und klicken Sie auf "Element überprüfen". Scrollen Sie unten links auf der Seite in der Navigationsleiste nach unten und klicken Sie auf das Desktopsymbol. Das Dropdown-Feld "User Agent String" enthält Optionen zum Emulieren von IE6-11.

Es klappt. Ich habe es nur einige Minuten benutzt, bevor ich diese Antwort geschrieben habe. Schnappschüsse können nicht gepostet werden - nicht genug Ruf.


Dies ist der Code - folgen Sie dem Link, um ihn erneut anzuzeigen:

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

Die Verwendung dieses RegExp scheint für IE 10 und IE 11 zu funktionieren:

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

Ich habe keinen IE älter als IE 10, um dies zu testen.

AntoineMoPa
quelle
0

Navigator verwenden: -

Das navigatorist ein Objekt, das alle Informationen über den Browser des Client-Computers enthält.

navigator.appName Gibt den Namen des Browsers des Client-Computers zurück.

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
quelle
1
appName ist Netscape in IE 11. Sie haben alles getan, um Entwickler auszutricksen.
Kagronick
0

Ich habe festgestellt, dass IE11 mehr als eine Benutzeragentenzeichenfolge in verschiedenen Umgebungen bereitstellt.

Anstatt sich auf MSIEandere Ansätze zu verlassen, ist es besser, sich auf die TridentVersion zu verlassen

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

Hoffe das hilft :)

Mr.7
quelle