Wenn ich IE ermitteln 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 zurück: "Sie verwenden keinen Internet Explorer". Wie kann ich es erkennen?
IE11 meldet sich nicht mehr als MSIE
, entsprechend dieser Liste von Änderungen es ist beabsichtigt, um eine falsche Erkennung zu vermeiden.
Was Sie tun können, wenn Sie wirklich wissen möchten, dass es IE ist, ist die Zeichenfolge Trident/
im Benutzeragenten zu ermitteln, wenn navigator.appName
Netscape
zurückgibt.
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 );
}
else if (navigator.appName == 'Netscape')
{
var ua = navigator.userAgent;
var re = new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
console.log('IE version:', getInternetExplorerVersion());
Beachten Sie, dass sich IE11 (afaik) noch in der Vorschau befindet und der Benutzeragent vor der Veröffentlichung geändert werden kann.
Verwenden Sie !(window.ActiveXObject) && "ActiveXObject" in window
, um IE11 explizit zu erkennen.
Um eine Version von IE (vor Edge, "Trident") zu erkennen, verwenden Sie stattdessen "ActiveXObject" in window
.
Verwenden Sie MSInputMethodContext
als Teil einer Funktionserkennungsprüfung. Zum Beispiel:
//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
Verweise
Ich habe deine Antworten gelesen und eine Mischung gemacht. Es scheint mit Windows XP (IE7/IE8) und Windows 7 (IE9/IE10/IE11) zu funktionieren.
function ie_ver(){
var iev=0;
var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var rv=navigator.userAgent.indexOf("rv:11.0");
if (ieold) iev=new Number(RegExp.$1);
if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
if (trident&&rv!=-1) iev=11;
return iev;
}
Wenn ich 0 zurückschicke, bedeutet das natürlich kein IE.
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
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 holen wir die Versionsnummer aus einem regulären Ausdruck String.match()
. Ein try-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.
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
So funktioniert es: Jede Version von IE bietet Unterstützung für zusätzliche Funktionen , die in nicht enthalten sind vorherige Versionen. So können wir die Funktionen von oben nach unten testen. Eine ternäre Sequenz wird hier der Kürze halber verwendet, obwohl die Anweisungen if-then
Und switch
genauso gut funktionieren würden. Die Variable ie
wird auf eine Ganzzahl von 5 bis 11 oder 1 für ältere oder 99 für neuere/Nicht-IE festgelegt. Sie können den Wert 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 Polyfüllungen für Dinge wie document.addEventListener
Hinzufügen. In solchen Situationen ist der Benutzeragent die beste Option.
Wenn Sie nur interessiert sind, ob ein Browser die meisten HTML 5- und CSS 3-Standards unterstützt, können Sie davon ausgehen , dass IE 8 und niedriger das Hauptproblem bleibt Apps. Wenn Sie nach window.getComputedStyle
Suchen, 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 Unterstützung von Standards erheblich, für native CSS-Animationen ist jedoch IE 10 erforderlich.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
Angular JS macht das so.
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}
msie ist eine positive Zahl, wenn IE und NaN für andere Browser wie Chrome, Firefox.
warum ?
Seit Internet Explorer 11 hat sich die Benutzeragentenzeichenfolge erheblich geändert.
verweisen Sie dies:
lösung:
function GetIEVersion() {
var sAgent = window.navigator.userAgent;
var Idx = sAgent.indexOf("MSIE");
// If IE, return version number.
if (Idx > 0)
return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));
// If IE 11 then look for Updated user agent string.
else if (!!navigator.userAgent.match(/Trident\/7\./))
return 11;
else
return 0; //It is not IE
}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
alert("This is IE " + GetIEVersion());
}else {
alert("This no is IE ");
}
Ich verwende eine einfachere Methode:
Das globale Objekt des Navigators verfügt über eine Eigenschaftskontaktpunkte. In Internet Exlorer 11 heißt es msMaxTouchPoints tho.
Wenn Sie also suchen:
navigator.msMaxTouchPoints !== void 0
Sie finden Internet Explorer 11.
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
Versuche dies:
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
Dies scheint eine bessere Methode zu sein. "indexOf" gibt -1 zurück, wenn nichts übereinstimmt. Bestehende Klassen werden dabei nicht überschrieben, sondern nur hinzugefügt.
// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
document.body.className = document.body.className+' ie10';
}
Erkennen Sie die meisten Browser damit:
var getBrowser = function(){
var navigatorObj = navigator.appName,
userAgentObj = navigator.userAgent,
matchVersion;
var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
//mobile
if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
}
// web browser
return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};
Um ehrlich zu sein, würde ich sagen, dass Sie eine Bibliothek benutzen, die das tut, was Sie brauchen (wie etwa platform.js). Irgendwann werden sich die Dinge ändern und die Bibliothek wird für diese Änderungen gerüstet, und die manuelle Analyse mit regulären Ausdrücken schlägt fehl.
Gott sei Dank IE geht weg ...
Nur für IE Browser:
var ie = 'NotIE'; //IE5-11, Edge+
if( !!document.compatMode ) {
if( !("ActiveXObject" in window) ) ) ie = 'Edge';
if( !!document.uniqueID){
if('ActiveXObject' in window && !window.createPopup ){ ie = 11; }
else if(!!document.all){
if(!!window.atob){ie = 10;}
else if(!!document.addEventListener) {ie = 9;}
else if(!!document.querySelector){ie = 8;}
else if(!!window.XMLHttpRequest){ie = 7;}
else if(!!document.compatMode){ie = 6;}
else ie = 5;
}
}
}
alert verwenden (ie);
Testen:
var browserVersionExplorer = (function() {
var ie = '<s>NotIE</s>',
me = '<s>NotIE</s>';
if (/msie\s|trident\/|Edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {
if (!!window.MSInputMethodContext) {
ie = !("ActiveXObject" in window) ? 'Edge' : 11;
} else if (!!document.uniqueID) {
if (!!(window.ActiveXObject && document.all)) {
if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {
ie = !!window.XMLHttpRequest ? 7 : 6;
} else {
ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;
}
if (!!document.documentMode && !!document.querySelector ) {
ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);
}
} else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);
}
}
return ie > 1 ? 'IE ' + ie : ie;
})();
alert(browserVersionExplorer);
Jetzt könnten wir etwas einfacher und einfacher verwenden:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|Edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(Edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
Ich habe das Ereignis onscroll
am Element mit der Bildlaufleiste verwendet. Als ich im IE ausgelöst wurde, habe ich die folgende Bestätigung hinzugefügt:
onscroll="if (document.activeElement==this) ignoreHideOptions()"