Detectar la versión de IE (anterior a v9) en JavaScript
Quiero enviar a los usuarios de nuestro sitio web a una página de error si están usando una versión Internet Explorer
anterior 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:
- Sí, sé que los usuarios pueden falsificar su
useragent
cadena. No me preocupa. - 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 IE
navegadores no. Verificar característica por característica en todo el sitio sería un desperdicio. - 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. - 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?
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 .
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
}