Javascript, detectar la versión de Internet Explorer
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


Exelente loco, esto era lo que estaba buscando.
Tienes algun buen tutal de javascript que me pases ???
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.