Detectar la versión de IE (anterior a v9) en JavaScript

Resuelto Chad Decker asked hace 12 años • 37 respuestas

Quiero enviar a los usuarios de nuestro sitio web a una página de error si están usando una versión Internet Exploreranterior a la v9. Simplemente no vale la pena dedicar nuestro tiempo y dinero a apoyarlo IE pre-v9. Los usuarios de todos los demás navegadores que no sean IE están bien y no deberían ser rechazados. Aquí está el código propuesto:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

¿Este código funcionará?

Para evitar algunos comentarios que probablemente me lleguen:

  1. Sí, sé que los usuarios pueden falsificar su useragentcadena. No me preocupa.
  2. Sí, sé que los profesionales de la programación prefieren detectar compatibilidad con funciones en lugar del tipo de navegador, pero no creo que este enfoque tenga sentido en este caso. Ya sé que todos los navegadores (relevantes) que no son IE admiten las funciones que necesito y que todos los pre-v9 IEnavegadores no. Verificar característica por característica en todo el sitio sería un desperdicio.
  3. Sí, sé que alguien que intentara acceder al sitio usando IE v1(o >= 20) no obtendría 'badBrowser' configurado como verdadero y la página de advertencia no se mostraría correctamente. Ése es un riesgo que estamos dispuestos a correr.
  4. Sí, sé que Microsoft tiene "comentarios condicionales" que pueden usarse para una detección precisa de la versión del navegador. IE ya no admite comentarios condicionales a partir de IE 10, lo que hace que este enfoque sea absolutamente inútil.

¿Alguna otra cuestión obvia a tener en cuenta?

Chad Decker avatar Jun 10 '12 05:06 Chad Decker
Aceptado

Esta es mi forma preferida de hacerlo. Da el máximo control. (Nota: las declaraciones condicionales solo se admiten en IE5 - 9).

Primero configura tus clases de ie correctamente

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

Luego puedes usar CSS para hacer excepciones de estilo o, si lo necesitas, puedes agregar algo de JavaScript simple:

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

Gracias a Paul Irlandés .

Jezen Thomas avatar Jun 09 '2012 22:06 Jezen Thomas

Devuelve la versión de IE o, si no, IE, devuelve falso

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

Ejemplo:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

o

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

o

if (isIE()) {
 // is IE
} else {
 // Other browser
}
weroro avatar Apr 13 '2013 01:04 weroro