web-dev-qa-db-fra.com

Détection Internet Explorer 11

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 n'a pas réussi à 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 du développeur dans IE11 et essayé d'accéder à certains objets JavaScript prédéfinis. Je reçois toujours la même erreur.

J'ai essayé

navigator.userAgent

window.navigator

console.log('test');

Quelqu'un a une idée à ce sujet?

81
Miqdad Ali

Éditer 18 nov 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

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

(ou courir this )

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

J'ai tous les VMS de IE:

enter image description here

enter image description here

enter image description here

enter image description here

Remarque: cela ne fonctionnera pas pour IE11:

comme vous pouvez le voir ici, cela retourne vrai:

enter image description here

Alors, que pouvons-nous faire :

Apparemment, ils ont ajouté l'espace 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.

149
Royi Namir

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. */
}
80
EpokK

Toutes les réponses ci-dessus ignorent le fait que vous mentionnez que vous n'avez ni fenêtre ni navigateur

Puis j'ai ouvert la console de développement dans IE11

et c'est où il est dit

Objet non trouvé et doit être réévalué.

et navigateur, fenêtre, console, aucun d’eux n’existe et doit être réévalué. J'ai eu cela en émulation. fermez et ouvrez la console plusieurs fois.

19
commonpike

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
}  
17
KennyE

Et comment j'ai implémenté cela 

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
5
Miqdad Ali

Ce lien était utile . Il contient le code javascript permettant de détecter toutes les versions de IE jusqu'à IE11. J'ai testé le script avec l'émulateur IE11. Pour trouver l'émulateur IE11, cliquez sur le navigateur avec le bouton droit de la souris, puis sélectionnez "Inspecter l'élément". En bas à gauche de la page, faites défiler la barre de navigation et cliquez sur l'icône du bureau. La liste déroulante "User Agent String" contient les options permettant d'émuler IE6-11. 

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


Ceci est le code - suivez le lien pour le visualiser à 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>

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

Par défaut, IE11 bloque la possibilité d'utiliser ActiveX. Donc, ce code ne fonctionnera pas tant que l'utilisateur n'aura pas répondu en acceptant d'exécuter le script.

1
Michal

Okay essayer ceci, simple et pour IE11 et IE version 11 ci-dessous

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

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

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

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

Une façon assez concise de détecter IE 11 uniquement est la suivante:

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

ou

 var IE11= !!window.msCrypto;

msCrypto est une version préfixée de l'objet window.crypto et implémentée uniquement dans IE 11.

https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

0
j.j.

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

Au lieu de s'appuyer sur MSIE et d'autres approches, il vaut mieux s'appuyer sur Trident version

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

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

0
Mr.7

Utiliser cette RegExp semble fonctionner pour IE 10 et IE 11:

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

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

0
antoineMoPa