tus camisetas frikis en camisetafriki.com
Home > Programacion > Javascript, detectar la versión de Internet Explorer

Javascript, detectar la versión de Internet Explorer

March 16th, 2009 Leave a comment Go to comments

Como hace mucho que no escribo, voy a hacerlo comentando algo que he necesitado hoy en el curro, que es identificar la versión de internet explorer para poder realizar una función u otra, que sabemos que no va a ser compatible en una versión y en otra si, vamos, lo típico.

Una manera es a partir de la versión de javascript, la cual no es muy fiable.

El código que nos sirve para almacenar la versión en una variable es el siguiente:

1
2
var ieVer=/*@cc_on function(){ switch(@_jscript_version){ case 1.0:return 1; case 3.0:return 3; case 5.0:return 5; case 5.1:return 5; case 5.5:return 5.5; case 5.6:return 6; case 5.7:return 7; case 5.8:return 5.8; }}()||@*/0;
if(/MSIE 6.0/i.test(navigator.userAgent)) {ieVer=6;}

Las instrucciones entre /*@cc_on y */ son comentarios condicionales (y que ni yo sabía que existía tal cosa) y por lo visto es tan poco estándar que sólo internet explorer lo lee, así que de entrada ignoramos que otros navegadores se metan por ahí y la lien. De este modo valdrá 0 para el resto de navegadores (y podemos entonces comparar la versión de éstos de otras maneras).

La parte de dentro del comentario chungo, asocia un valor a cada versión del IE, de este modo, la versión 1 devuelve 1, la versión 3 devuelve 3, etc…

Se comprueba hasta el 5.8, luego el 6 se comprueba fuera del comentario. La versión 7 y 8 del Internet Explorer devuelve 7 u 8 según proceda pese a no estar contemplado en el código (intuyo que va implícito en la versión de javascript que implementen).

Así, para comprobar si el navegador es inferior a una versión, solo hay que hacer:

1
if (ieVer<=6) {funcionEjecutada();}

Otro método más fiable es parsear con una expresión regular la versión del navegador. El código es el siguiente:

1
function vIE(){return (navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;}

Devuelve la versión de internet explorer devuelta por la variable UserAgent en caso de ser Internet Explorer o -1 para el resto de navegadores (curioso que el appName del firefox sea el difunto Netscape aunque luego en el userAgent se indique Firefox).

Fuente:outbook

Categories: Programacion Tags:
  • Rubenshot

    Exelente loco, esto era lo que estaba buscando.

    Tienes algun buen tutal de javascript que me pases ???

  • http://kokainc.blogspot.com Niko

    Muchas gracias!! Al final me quedé con el segundo método, que para mí funciona perfectamente!

    El primer método lo encontré antes en otro blog en inglés y al probarlo en explorer 8 me devolvía erróneamente como versión 8 al renderizar la página en modo de compatibilidad (esperaba que me devolviese la 7).

    El segundo método que propones funciona a la perfección!!! Lo he probado con explorer 8 (IE8), tanto en modo normal como en modo de compatibilidad (IE7), tambien en IE6 y Firefox 3.5.

  • andrslen

    Y por donde meto el código

  • andrslen

    Y por donde meto el código

  • Sebs

    Uso la segunda y no me anda, llamo a la función desde un onLoad y/o desde un button y no devuelve nada.

  • http://www.facebook.com/fernando.f.gallego Fernando Fernández Gallego

    Aquí hay un artículo de Micrsoft que explican cómo hacerlo
    http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx
    saludos.