Lorsque 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.$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 );
}
Mais IE11 renvoie "Vous n'utilisez pas Internet Explorer". Comment puis-je le détecter?
internet-explorer
debugging
internet-explorer-11
browser-detection
forward-compatibility
Paul Sweatte
la source
la source
Réponses:
IE11 ne rapporte plus car
MSIE
, selon cette liste de modifications il est intentionnel d'éviter toute détection erronée.Ce que vous pouvez faire si vous voulez vraiment savoir que c'est IE, c'est détecter la
Trident/
chaîne dans l'agent utilisateur sinavigator.appName
retourneNetscape
, quelque chose comme (le non testé);Notez que IE11 (afaik) est toujours en prévisualisation et l'agent utilisateur peut changer avant la sortie.
la source
it's intentional to avoid mis-detection
- Malheureusement, maintenant que IE11 est libéré, nous avons un code qui est cassé en seulement IE11, alors qu'une détection correcte de IE aurait travaillé ...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\./);
sourceUtilisez
!(window.ActiveXObject) && "ActiveXObject" in window
pour détecter explicitement IE11.Pour détecter toute version d'IE (pré-Edge, "Trident"), utilisez
"ActiveXObject" in window
plutôt.la source
window.ActiveXObject
, comme décrit dans l'article, renvoieundefined
maintenant dans IE11 (ainsi que les navigateurs non Microsoft.) Le test utilisant l'in
opérateur javascript renvoietrue
dans tous les navigateurs Microsoft, donc les deux sont strictement le cas dans IE11. Si Microsoft émet une modification du comportement de l'in
opérateur, oui, cette méthode sera interrompue.À utiliser
MSInputMethodContext
dans le cadre d'une vérification de détection de fonctionnalité. Par exemple:Références
la source
#false
dans non-IE, IE8,9,10, Edge 14,15.#true
dans IE11 uniquement. N'a pas testé avec le mode document activé. Testé avec Browserstack.J'ai lu vos réponses et fait un mix. Il semble fonctionner avec Windows XP (IE7 / IE8) et Windows 7 (IE9 / IE10 / IE11).
Bien sûr, si je retourne 0, cela signifie pas d'IE.
la source
Obtenez la version d'IE à partir de l'agent utilisateur
Comment ça marche: La chaîne de l' agent utilisateur pour toutes les versions IE comprend une partie « MSIE espace la version » ou « Trident autre texte rv espace ou deux points la version ». Sachant cela, nous récupérons le numéro de version à partir d'une
String.match()
expression régulière. Untry-catch
bloc est utilisé pour raccourcir le code, sinon nous aurions besoin de tester les limites du tableau pour les navigateurs non IE.Remarque: l'agent utilisateur peut être usurpé ou omis, parfois involontairement si l'utilisateur a défini son navigateur sur un "mode de compatibilité". Bien que cela ne semble pas être un gros problème dans la pratique.
Obtenez la version d'IE sans l'agent utilisateur
Fonctionnement: chaque version d'IE ajoute la prise en charge de fonctionnalités supplémentaires introuvables dans les versions précédentes. Nous pouvons donc tester les fonctionnalités de manière descendante. Une séquence ternaire est utilisée ici par souci de concision, cependant
if-then
et lesswitch
déclarations fonctionneraient tout aussi bien. La variableie
est définie sur un entier 5-11, ou 1 pour les anciens, ou 99 pour les plus récents / non IE. Vous pouvez le mettre à 0 si vous voulez juste tester IE 1-11 exactement.Remarque: La détection d'objets peut se 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 souhaitez uniquement savoir si un navigateur prend en charge la plupart des normes HTML 5 et CSS 3, vous pouvez raisonnablement supposer qu'IE 8 et versions inférieures restent les principales applications problématiques. Tester pour
window.getComputedStyle
vous donnera également un assez bon mélange de navigateurs modernes (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 améliore considérablement la prise en charge des normes, mais l'animation CSS native nécessite IE 10.la source
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 fait de cette façon.
msie sera un nombre positif si son IE et NaN pour un autre navigateur comme Chrome, Firefox.
Pourquoi ?
Depuis Internet Explorer 11, la chaîne de l'agent utilisateur a considérablement changé.
référer ceci:
msdn # 1 msdn # 2
la source
Solution :
la source
This is IE 0
J'utilise une méthode plus simple:
L'objet global du navigateur a une propriété points de contact, dans Internet Exlorer 11 est appelé msMaxTouchPoints tho.
Donc si vous cherchez:
Vous trouverez Internet Explorer 11.
la source
la source
Essaye ça:
la source
!navigator.userAgent.match("Acoo Browser;") && navigator.userAgent.match(/MSIE/i) ? true : false
mais cela ne fonctionne pas toujours parce que le navigateur acoo n'a pas toujours "Navigateur Acoo"; dans son useragent mais en fait vous n'avez pas besoin de vous soucier du fait que le navigateur acoo a "MSIE" dans son useragent car le navigateur acoo est presque le même.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.
la source
Détectez la plupart des navigateurs avec ceci:
https://gist.github.com/earlonrails/5266945
la source
J'ai utilisé l'
onscroll
événement à l'élément avec la barre de défilement. Lorsque déclenché dans IE, j'ai ajouté la validation suivante:la source
Uniquement pour le navigateur IE:
utiliser l'alerte (c.-à-d.);
Essai:
Mise à jour 01 juin 2017
Maintenant, nous pourrions utiliser quelque chose de plus simple et de plus simple:
la source
Franchement, je dirais d'utiliser une bibliothèque qui fait ce dont vous avez besoin (comme platform.js par exemple). À un moment donné, les choses vont changer et la bibliothèque sera équipée pour ces changements et l'analyse manuelle à l'aide d'expressions régulières échouera.
Dieu merci, IE s'en va ...
la source