Comment détecter IE11?
quand je veux détecter IE j'utilise ce 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. );
}
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 );
}
mais IE11 retourne "You're not using Internet Explorer". Comment puis-je détecter?
15 réponses
IE11 ne déclare plus MSIE
, selon cette liste de modifications c'est intentionnel pour éviter la détection erronée.
Ce que vous pouvez faire si vous vraiment veulent savoir c'est IE est de détecter le Trident/
chaîne de l'agent utilisateur si navigator.appName
renvoie Netscape
, quelque chose comme (non testé);
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. );
}
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. );
}
return rv;
}
console.log('IE version:', getInternetExplorerVersion());
notez que IE11 (afaik) est toujours en aperçu, et l'agent utilisateur peut changer avant la sortie.
utiliser !(window.ActiveXObject) && "ActiveXObject" in window
pour détecter IE11 explicitement.
pour détecter toute version IE (pre-Edge," Trident"), utilisez "ActiveXObject" in window
à la place.
utiliser MSInputMethodContext
dans le cadre d'un contrôle de détection de caractéristique. Par exemple:
//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
Références
j'ai lu vos réponses et j'ai fait un mélange. Il semble fonctionner avec Windows XP(IE7/IE8) et Windows 7 (IE9/IE10/IE11).
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.);
if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
if (trident&&rv!=-1) iev=11;
return iev;
}
bien sûr si je retourne 0, signifie pas IE.
Obtenir la Version de IE à partir de l'User-Agent
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
Comment cela fonctionne: La chaîne de l'agent utilisateur pour toutes les versions IE comprenant une partie "MSIE espace version " ou "Trident autre texte rv de l'espace-ou-virgule version ". Sachant cela, nous attrapons le numéro de version d'un String.match()
expression régulière. Un bloc try-catch
est utilisé pour raccourcir le code, sinon nous aurions besoin de tester les limites du tableau pour les navigateurs non-IE.
Note: l'utilisateur-agent peut être mystifié ou omis, parfois involontairement si l'Utilisateur a réglé son navigateur à un "mode de compatibilité". Bien que cela ne semble pas être un problème dans la pratique.
Obtenir la Version de IE sans le User-Agent
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 );
comment ça marche: chaque version D'IE ajoute le support pour caractéristiques supplémentaires non trouvé dans les versions précédentes. Nous pouvons donc tester les caractéristiques de manière descendante. Une séquence ternaire est utilisée ici par souci de brièveté, bien que les énoncés if-then
et switch
fonctionneraient tout aussi bien. La variable ie
est définie à un entier 5-11, ou 1 pour l'ancien, ou 99 pour le nouveau/non-IE. Vous pouvez définir à 0 si vous voulez juste tester pour IE 1-11 exactement.
Note: la détection D'objet peut casser si votre code est exécuté sur une page avec des scripts tiers qui ajoutent des polyfills pour des choses comme document.addEventListener
. Dans de telles situations, l'agent-utilisateur est la meilleure option.
Détecter si le Navigateur est Moderne
si vous êtes seulement intéressé à savoir si un navigateur prend en charge la plupart des HTML 5 et les normes CSS 3, vous pouvez raisonnablement supposer QU'IE 8 et inférieur restent le problème principal apps. Tester pour window.getComputedStyle
vous donnera un assez bon mélange de navigateurs modernes, ainsi (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 améliore considérablement la prise en charge des standards, mais L'animation natif CSS nécessite IE 10.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
Angulaire JS fait de cette façon.
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}
msie sera un nombre positif si son IE et NaN pour les autres navigateurs comme chrome,firefox.
pourquoi ?
depuis Internet Explorer 11, la chaîne de caractères utilisateur-agent a considérablement changé.
reportez-vous ceci :
solution:
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 ");
}
j'utilise une méthode plus simple:
l'objet global navigator a une propriété touchpoints, dans Internet Exlorer 11 est appelé msMaxTouchPoints tho.
donc si vous cherchez:
navigator.msMaxTouchPoints !== void 0
vous trouverez 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;
Essayez Ceci:
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")
}
Cela semble être une meilleure méthode. "indexOf" renvoie -1 si rien ne correspond. Il n'écrase pas les classes existantes sur le corps, il les ajoute simplement.
// 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';
}
détecter la plupart des navigateurs avec ce:
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, '-?'];
};
j'ai utilisé l'événement onscroll
à l'élément avec la barre de défilement. Lors du déclenchement dans IE, j'ai ajouté la validation suivante:
onscroll="if (document.activeElement==this) ignoreHideOptions()"
Uniquement pour le Navigateur IE:
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;
}
}
}
utilisation de l'alerte(ie);
Test:
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);
maintenant nous pourrions utiliser quelque chose de plus facile et plus simple:
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;
très franchement, je dirais d'utiliser une bibliothèque qui fait ce dont vous avez besoin (comme plate-forme.js par exemple). À un certain moment, les choses changeront et la bibliothèque sera équipée pour ces changements et l'analyse manuelle utilisant des expressions régulières échouera.
Dieu merci, IE s'en va...