Wenn ich IE erkennen möchte, verwende ich diesen Code:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
IE11 gibt jedoch "Sie verwenden den Internet Explorer nicht" zurück. Wie kann ich es erkennen?
internet-explorer
debugging
internet-explorer-11
browser-detection
forward-compatibility
Paul Sweatte
quelle
quelle
Antworten:
IE11 meldet nicht mehr, da
MSIE
gemäß dieser Liste von Änderungen beabsichtigt ist, eine Fehlerkennung zu vermeiden.Was Sie tun können, wenn Sie wirklich wissen möchten, dass es sich um einen IE handelt, ist, die
Trident/
Zeichenfolge im Benutzeragenten zu erkennen , wenn sienavigator.appName
zurückgegeben wirdNetscape
, etwa (die nicht getestete);Beachten Sie, dass sich IE11 (afaik) noch in der Vorschau befindet und sich der Benutzeragent möglicherweise vor der Veröffentlichung ändert.
quelle
it's intentional to avoid mis-detection
- Leider haben wir jetzt, da IE11 veröffentlicht ist, Code, der nur in IE11 defekt ist, während eine korrekte Erkennung von IE funktioniert hätte ...function isIE() { return ((navigator.appName == 'Microsoft Internet Explorer') || ((navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null))); }
var isIE11 = !!navigator.userAgent.match(/Trident\/7\./);
QuelleVerwenden Sie
!(window.ActiveXObject) && "ActiveXObject" in window
diese Option, um IE11 explizit zu erkennen.Verwenden Sie
"ActiveXObject" in window
stattdessen eine IE-Version (Pre-Edge, "Trident") .quelle
window.ActiveXObject
im Artikel beschriebeneundefined
Zugriffsversuch wird jetzt in IE11 (sowie in Nicht-Microsoft-Browsern) zurückgegeben. Der Test mit dem Javascript-in
Operator wirdtrue
in allen Microsoft-Browsern zurückgegeben, sodass beide ausschließlich in IE11 der Fall sind. Wenn Microsoft das Verhalten desin
Operators ändert , wird diese Methode unterbrochen.Verwendung
MSInputMethodContext
als Teil einer Funktionserkennungsprüfung. Beispielsweise:Verweise
quelle
#false
in Nicht-IE, IE8,9,10, Edge 14,15.#true
nur in IE11. Wurde nicht mit aktivem Dokumentmodus getestet. Getestet mit Browserstack.Ich habe deine Antworten gelesen und eine Mischung gemacht. Es scheint mit Windows XP (IE7 / IE8) und Windows 7 (IE9 / IE10 / IE11) zu funktionieren.
Wenn ich 0 zurückgebe, bedeutet das natürlich keinen IE.
quelle
Holen Sie sich die IE-Version vom User-Agent
So funktioniert es: Die User-Agent-Zeichenfolge für alle IE-Versionen enthält einen Teil "MSIE Space- Version " oder "Trident Other -Text- RV- Space-or-Colon- Version ". In diesem Wissen greifen wir auf die Versionsnummer eines
String.match()
regulären Ausdrucks zurück. Eintry-catch
Block wird verwendet, um den Code zu verkürzen, andernfalls müssten wir die Array-Grenzen für Nicht-IE-Browser testen.Hinweis: Der Benutzeragent kann gefälscht oder weggelassen werden, manchmal unbeabsichtigt, wenn der Benutzer seinen Browser auf einen "Kompatibilitätsmodus" eingestellt hat. Dies scheint jedoch in der Praxis kein großes Problem zu sein.
Holen Sie sich die IE-Version ohne den User-Agent
So funktioniert es: Jede IE-Version bietet Unterstützung für zusätzliche Funktionen , die in früheren Versionen nicht vorhanden waren. So können wir die Funktionen von oben nach unten testen. Der Kürze halber wird hier jedoch eine ternäre Sequenz verwendet,
if-then
undswitch
Anweisungen würden genauso gut funktionieren. Die Variableie
wird auf eine Ganzzahl 5-11 oder 1 für ältere oder 99 für neuere / Nicht-IE gesetzt. Sie können es auf 0 setzen, wenn Sie nur genau auf IE 1-11 testen möchten.Hinweis: Die Objekterkennung kann unterbrochen werden, wenn Ihr Code auf einer Seite mit Skripten von Drittanbietern ausgeführt wird, die Polyfills für Dinge wie hinzufügen
document.addEventListener
. In solchen Situationen ist der Benutzeragent die beste Option.Ermitteln Sie, ob der Browser modern ist
Wenn Sie nur daran interessiert sind, ob ein Browser die meisten HTML 5- und CSS 3-Standards unterstützt oder nicht, können Sie davon ausgehen, dass IE 8 und niedriger die Hauptproblem-Apps bleiben. Wenn Sie auf
window.getComputedStyle
testen, erhalten Sie auch eine ziemlich gute Mischung aus modernen Browsern (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 verbessert die Standardunterstützung erheblich, für native CSS-Animationen ist jedoch IE 10 erforderlich.quelle
var ie = 0; try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; } catch(e){} if (ie !== 0) { location.href = "../ie-redirect/redirect.html"; }
Angular JS macht das so.
msie wird eine positive Zahl sein, wenn sein IE und NaN für andere Browser wie Chrome, Firefox.
Warum ?
Ab Internet Explorer 11 hat sich die Zeichenfolge des Benutzeragenten erheblich geändert.
Verweisen Sie darauf:
msdn # 1 msdn # 2
quelle
Lösung:
quelle
This is IE 0
Ich benutze eine einfachere Methode:
Das globale Navigatorobjekt verfügt über Eigenschaftsberührungspunkte. In Internet Exlorer 11 heißt es msMaxTouchPoints tho.
Also, wenn Sie suchen nach:
Sie finden Internet Explorer 11.
quelle
quelle
Versuche dies:
quelle
!navigator.userAgent.match("Acoo Browser;") && navigator.userAgent.match(/MSIE/i) ? true : false
aber das funktioniert nicht immer, da der acoo-Browser nicht immer über "Acoo Browser" verfügt. in seinem Useragent, aber eigentlich müssen Sie sich nicht darum kümmern, dass der acoo-Browser "MSIE" in seinem useragent hat, da der acoo-Browser fast derselbe ist.Dies scheint eine bessere Methode zu sein. "indexOf" gibt -1 zurück, wenn nichts übereinstimmt. Bestehende Klassen im Body werden nicht überschrieben, sondern nur hinzugefügt.
quelle
Erkennen Sie die meisten Browser damit:
https://gist.github.com/earlonrails/5266945
quelle
Ich habe das
onscroll
Ereignis am Element mit der Bildlaufleiste verwendet. Beim Auslösen im IE habe ich die folgende Validierung hinzugefügt:quelle
Nur für IE Browser:
Alarm verwenden (dh);
Testen:
Update 01. Juni 2017
Jetzt könnten wir etwas einfacher und einfacher gebrauchen:
quelle
Ehrlich gesagt würde ich sagen, verwenden Sie eine Bibliothek, die das tut, was Sie brauchen (wie zum Beispiel platform.js). Irgendwann werden sich die Dinge ändern und die Bibliothek wird für diese Änderungen ausgestattet sein, und das manuelle Parsen mit regulären Ausdrücken schlägt fehl.
Gott sei Dank geht IE weg ...
quelle