Détection d'Internet Explorer 11

125

Je sais que IE 11 a une chaîne d'agent utilisateur différente de celle de tous les autres IE

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

J'ai essayé de détecter IE 11 avec la réponse spécifiée pour cette question '

Jquery ne parvient pas à détecter IE 11

C'est !!navigator.userAgent.match(/Trident\/7\./)

Mais je reçois une erreur Object not found and needs to be re-evaluated.

Ensuite, j'ai ouvert la console de développeur dans IE11 et essayé d'accéder à certains objets javascript prédéfinis, j'obtiens toujours la même erreur.

j'ai essayé

navigator.userAgent

window.navigator

console.log('test');

Quelqu'un en a une idée?

Miqdad Ali
la source
@Bobkhin J'ai mentionné ci-dessus mon problème. obtention d'une erreurObject not found and needs to be re-evaluated.
Miqdad Ali
duplication possible de Comment détecter IE 11 avec javascript dans Asp.net
RandomSeed
duplicata possible de Comment détecter IE11?
Paul Sweatte

Réponses:

188

Modifier le 18 novembre 2016

Ce code fonctionne également ( pour ceux qui préfèrent une autre solution, sans utiliser ActiveX )

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

Réponse originale

Afin de vérifier Ie11, vous pouvez utiliser ceci: (testé)

(ou exécutez ceci )

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

J'ai tous les VMS d'IE:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Remarque: cela ne fonctionnera pas pour IE11:

comme vous pouvez le voir ici, il renvoie vrai:

entrez la description de l'image ici

Alors, que pouvons-nous faire :

Apparemment, ils ont ajouté l'espace de bits de la machine:

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"

afin que nous puissions faire:

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

cela ne retournera vrai que pour ie11.

Royi Namir
la source
1
@Jan. Oui. seul IE11 renverrait vrai pour toute cette condition. Je viens de montrer que <11 renvoie faux.
Royi Namir
1
@IanSteffy Ceci est juste pour montrer le résultat (!) De l'opération. Vous pouvez ouvrir un fichier HTML et ajouter une balise de script et exécuter la commande à l'intérieur de ce script. Voici courir ceci .
Royi Namir
2
x64 renvoie Chrome et Edge
Gene R
3
Attendez, il y a un IE12? Je pensais que IE11 était le dernier et que nous n'aurions bientôt plus à nous soucier de ce navigateur stupide! ☹
Michael Scheper
1
Ne fonctionne pas pour mon IE 11.0.9600.19431 sous Windows 7 Entreprise. Il n'y a pas window.MSInputMethodContext.
Heinrich Ulbricht
105

Pour détecter rapidement MSIE (de la version 6 à la version 11):

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
EpokK
la source
2
Le second ne devrait-il pas l' indexOf()être > -1?
réformé le
Ouais, je ne sais pas pourquoi c'est> 0 et non> -1, mais "Trident /" apparaît de toute façon beaucoup plus loin dans la chaîne appVersion-
chrismarx
22

J'utilise la fonction suivante pour détecter les versions 9, 10 et 11 d'IE:

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
la source
21

Toutes les réponses ci-dessus ignorent le fait que vous mentionnez que vous n'avez pas de fenêtre ou de navigateur :-)

Puis j'ai ouvert la console développeur dans IE11

et c'est là que ça dit

Objet introuvable et doit être réévalué.

et navigateur, fenêtre, console, aucun d'entre eux n'existe et doit être réévalué. J'ai eu ça en émulation. fermez et ouvrez la console quelques fois.

grand brochet
la source
5
bonté gracieuse MERCI d'avoir lu la question et d'avoir répondu au problème par une réévaluation.
marknadal
8
A travaillé pour moi aussi. C'est pourquoi il y aura des fêtes partout dans le monde quand IE mourra.
voltrevo
La fermeture et l'ouverture de la console ont fonctionné pour moi. Comportement étrange par rapport à Firefox ou Chrome (mais c'est IE, donc ça chiffres.)
Ectropy
7

Un moyen assez sûr et concis de détecter uniquement IE 11 est

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

ou quelque chose comme ça
var IE11= !!window.msCrypto;


msCryptoest une version préfixée de l' window.cryptoobjet et implémentée uniquement dans IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

jj
la source
La seule solution de travail (c'est la plus courte, la plus propre et la plus élégante)! Royi Namir /x64|x32/ig.test(window.navigator.userAgent)s'applique également à Firefox!
Sándor Zuboly le
4

Et comment j'ai implémenté cela

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Miqdad Ali
la source
1
Je pense que vous avez une faute de frappe dans votre fonction. Tout d'abord, vous effectuez le contrôle de condition, qui n'est pas utilisé. Deuxièmement, vous voulez peut-être dire && "ActiveXObject" in window. Troisièmement: quel est le truc avec la double négation !!?
dma_k
1
!! signifie à peu près «forcer à booléen».
Andrew Gray
4

OK, essayez ceci, simple et pour IE11 et IE sous la version 11

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1pour la version IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1pour la version IE inférieure à 11

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

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

Dupinder Singh
la source
2

Ce lien a été utile . Il contient le code javascript pour détecter toutes les versions d'IE jusqu'à IE11. J'ai testé le script avec l'émulateur IE11. Pour trouver l'émulateur IE11, cliquez avec le bouton droit sur le navigateur Web et cliquez sur "Inspecter l'élément". En bas à gauche de la page, faites défiler la barre de navigation vers le bas et cliquez sur l'icône du bureau. La liste déroulante "Chaîne de l'agent utilisateur" contient des options pour émuler IE6-11.

Ça marche. Je viens de l'utiliser quelques minutes avant d'écrire cette réponse. Impossible de publier des instantanés - réputation insuffisante.


Voici le code - suivez le lien pour le voir à nouveau:

// 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
la source
1

L'utilisation de ce RegExp semble fonctionner pour IE 10 et IE 11:

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

Je n'ai pas d'IE plus ancien que IE 10 pour tester cela.

antoineMoPa
la source
0

Utilisez Navigator: -

Le navigatorest un objet qui contient toutes les informations sur le navigateur de la machine cliente.

navigator.appName renvoie le nom du navigateur de la machine cliente.

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
la source
1
appName est Netscape sur IE 11. Ils ont tout fait pour tromper les développeurs.
Kagronick
0

J'ai trouvé que IE11 donne plus d'une chaîne d'agent utilisateur dans différents environnements.

Au lieu de s'appuyer sur MSIEet d'autres approches, il est préférable de s'appuyer sur la Tridentversion

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

J'espère que cela t'aides :)

Monsieur 7
la source