Compruebe si el usuario está utilizando IE

Resuelto user2571510 asked hace 10 años • 33 respuestas

Estoy llamando a una función como la siguiente haciendo clic en divs con una clase determinada.

¿Hay alguna manera de verificar al iniciar la función si un usuario está usando Internet Explorer y cancelarla o cancelarla si está usando otros navegadores para que solo se ejecute para usuarios de IE? Todos los usuarios aquí estarían en IE8 o versiones superiores, por lo que no necesitaría cubrir IE7 y versiones inferiores.

Si pudiera saber qué navegador están usando, sería fantástico, pero no es obligatorio.

Función de ejemplo:

$('.myClass').on('click', function(event)
{
    // my function
});
user2571510 avatar Nov 15 '13 17:11 user2571510
Aceptado

Han pasado varios años y el navegador Edge ahora usa Chromium como motor de renderizado.
Lamentablemente, comprobar IE 11 sigue existiendo.

Aquí hay un enfoque más sencillo, ya que las versiones antiguas de IE deberían desaparecer.

if (window.document.documentMode) {
  // Do IE stuff
}

Aquí está mi antigua respuesta (2014):

En Edge, la cadena del agente de usuario ha cambiado.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    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 => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Uso de muestra:

alert('IEEdge ' + detectIEEdge());

Cadena predeterminada de IE 10:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

Cadena predeterminada de IE 11:

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

Cadena predeterminada de Edge 12:

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 

Cadena predeterminada de Edge 13 (gracias @DrCord):

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 

Cadena predeterminada de Edge 14:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Cadena predeterminada de Edge 15:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

Cadena predeterminada de Edge 16:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

Cadena predeterminada de Edge 17:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

Cadena predeterminada de Edge 18 (vista previa interna):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Prueba en CodePen:

http://codepen.io/gapcode/pen/vEJNZN

Mario avatar Feb 11 '2014 20:02 Mario

Utilice el siguiente método de JavaScript:

function msieversion() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

Puede encontrar los detalles en el siguiente sitio de soporte de Microsoft:

Cómo determinar la versión del navegador a partir del script

Actualización: (soporte IE 11)

function msieversion() {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}
SpiderCode avatar Nov 15 '2013 11:11 SpiderCode

Si lo único que quieres saber es si el navegador es IE o no, puedes hacer esto:

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

Actualización 1: un método mejor

Recomiendo esto ahora. Sigue siendo muy legible y tiene mucho menos código :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

Gracias a JohnnyFun en los comentarios por la respuesta abreviada :)

Actualización 2: Pruebas de IE en CSS

En primer lugar, si puede, debe utilizar @supportsdeclaraciones en lugar de JS para comprobar si un navegador admite una determinada función CSS.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Tenga en cuenta que IE no admite @supportsningún tipo de soporte e ignorará cualquier estilo colocado dentro de una @supportsdeclaración).

Si el problema no se puede resolver, @supportspuede hacer esto:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Nota: classListes relativamente nuevo para JS y creo que, fuera de los navegadores IE, solo funciona en IE11. Posiblemente también en IE10).

Si está utilizando SCSS (Sass) en su proyecto, esto se puede simplificar a:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

Actualización 3: Agregar Microsoft Edge (no recomendado)

Si también desea agregar Microsoft Edge a la lista, puede hacer lo siguiente. Sin embargo , no lo recomiendo porque Edge es un navegador mucho más competente que IE.

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon avatar Mar 21 '2014 05:03 Daniel Tonon