Detección de Internet Explorer 11

125

Sé que IE 11 tiene una cadena de agente de usuario diferente a todos los demás IE

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

Intenté detectar IE 11 con la respuesta especificada para esta pregunta '

Jquery no detecta IE 11

Eso es !!navigator.userAgent.match(/Trident\/7\./)

Pero estoy recibiendo un error Object not found and needs to be re-evaluated.

Luego abrí la consola de desarrollador en IE11 e intenté acceder a algunos objetos javascript predefinidos, sigo recibiendo el mismo error.

Yo he tratado

navigator.userAgent

window.navigator

console.log('test');

¿Alguien tiene alguna idea al respecto?

Miqdad Ali
fuente
@Bobkhin He mencionado anteriormente mi problema. recibiendo errorObject not found and needs to be re-evaluated.
Miqdad Ali
posible duplicado de Cómo detectar IE 11 con javascript en Asp.net
RandomSeed
posible duplicado de ¿Cómo detectar IE11?
Paul Sweatte

Respuestas:

188

Editar 18 nov 2016

Este código también funciona ( para aquellos que prefieren otra solución, sin usar ActiveX )

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

Respuesta original

Para verificar Ie11, puede usar esto: (probado)

(o ejecuta esto )

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

Tengo todos los VMS de IE:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Aviso: esto no funcionará para IE11:

como puede ver aquí, devuelve verdadero:

ingrese la descripción de la imagen aquí

Entonces, qué podemos hacer :

Aparentemente, agregaron el espacio de bits de la máquina:

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"

para que podamos hacer:

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

esto devolverá verdadero solo para ie11.

Royi Namir
fuente
1
@Ene. si. solo IE11 devolvería verdadero para toda esta condición. Acabo de mostrar que <11 devuelve falso.
Royi Namir
1
@IanSteffy Esto es solo para mostrar el resultado (!) De la operación. Puede abrir un archivo HTML y agregar una etiqueta de secuencia de comandos y ejecutar el comando dentro de esa secuencia de comandos. Aquí ejecuta esto .
Royi Namir
2
x64devuelve Chrome y Edge
Gene R
3
Espera, ¿hay un IE12? ¡Pensé que IE11 era el último y que pronto ya no tendremos que preocuparnos por ese estúpido navegador! ☹
Michael Scheper
1
No no trabajar para mi IE 11.0.9600.19431 en Windows 7 Enterprise. No hay window.MSInputMethodContext.
Heinrich Ulbricht
105

Para detectar MSIE (de la versión 6 a la 11) rápidamente:

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}
EpokK
fuente
2
No debería la segunda indexOf()será > -1?
reformado el
Sí, no sé por qué es> 0 y no> -1, pero "Trident /" aparece mucho más lejos en la cadena de appVersion de todos modos-
chrismarx
22

Utilizo la siguiente función para detectar la versión 9, 10 y 11 de 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
fuente
21

Todas las respuestas anteriores ignoran el hecho de que mencionas que no tienes ventana ni navegador :-)

Luego abrí la consola de desarrollador en IE11

y ahí es donde dice

Objeto no encontrado y necesita ser reevaluado.

y navegador, ventana, consola, ninguno de ellos existe y necesita ser reevaluado. Lo he tenido en emulación. simplemente cierre y abra la consola unas cuantas veces.

commonpike
fuente
5
Dios mío GRACIAS por leer la pregunta y responder al problema con una reevaluación.
Marknadal
8
También funcionó para mí. Es por eso que habrá fiesta en todo el mundo cuando IE muera.
voltrevo
Cerrar y abrir la consola funcionó para mí. Comportamiento extraño en comparación con Firefox o Chrome (pero es IE, así que eso figura)
Ectropy
7

Una forma bastante segura y concisa de detectar solo IE 11 es

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

o algo como esto
var IE11= !!window.msCrypto;


msCryptoes una versión prefijada del window.cryptoobjeto y solo se implementa en IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto

jj
fuente
¡La única solución funcional (que es la más corta, limpia y elegante)! ¡Royi Namir también se /x64|x32/ig.test(window.navigator.userAgent)aplica a Firefox!
Sándor Zuboly
4

Y como implementé esto

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>
Miqdad Ali
fuente
1
Creo que tienes un error tipográfico en tu función. En primer lugar, realiza la comprobación de estado, que no se utiliza. En segundo lugar, quizás te refieres && "ActiveXObject" in window. Tercero: ¿cuál es el truco con la doble negación !!?
dma_k
1
!! prácticamente significa 'Coaccionar a booleano'.
Andrew Gray
4

Bien, intente esto, simple y para IE11 e IE por debajo de la versión 11

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1para la versión IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1para IE por debajo de la versión 11

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

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

Dupinder Singh
fuente
2

Este enlace fue útil . Contiene el código javascript para detectar todas las versiones de IE hasta IE11. Probé el script con el emulador IE11. Para encontrar el emulador de IE11, haga clic con el botón derecho en el navegador web y haga clic en "Inspeccionar elemento". En la parte inferior izquierda de la página, desplácese hacia abajo en la barra de navegación y haga clic en el icono del escritorio. El cuadro desplegable "Cadena de agente de usuario" contiene opciones para emular IE6-11.

Funciona. Lo usé unos minutos antes de escribir esta respuesta. No se pueden publicar instantáneas, no hay suficiente reputación.


Este es el código; siga el enlace para verlo nuevamente:

// 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
fuente
1

El uso de esta expresión regular parece funcionar para IE 10 e IE 11:

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

No tengo un IE anterior a IE 10 para probar esto.

antoineMoPa
fuente
0

Usar navegador: -

El navigatores un objeto que contiene toda la información sobre el navegador de la máquina cliente.

navigator.appName devuelve el nombre del navegador de la máquina 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
fuente
1
appName es Netscape en IE 11. Hicieron todo lo posible para engañar a los desarrolladores.
kagronick
0

Descubrí que IE11 proporciona más de una cadena de agente de usuario en diferentes entornos.

En lugar de confiar en MSIEotros enfoques, es mejor confiar en la Tridentversión

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

Espero que esto ayude :)

Señor 7
fuente