2011-08-29 18 views
14

Necesito detectar si el usuario está ejecutando una versión anterior de IE (IE9 está bien) desde un plugin de jQuery, por lo que no tendré control sobre el HTML.Detectar versiones anteriores de IE

Nos hemos desalentado de analizar la cadena de agente de usuario y utilizando $.browser.msie. El método $.support tampoco cubre el problema.

Entonces, me di cuenta de que esto funciona, pero no estoy seguro si es una "buena práctica".

$('body').append('<!--[if lte IE 8]><script>$("body").addClass("oldie");</script><![endif]-->'); 
var old_ie = $('body').is('.oldie'); 

¿Le utilizar este método o un palo con analizar la cadena de agente de usuario (Voy a tener que averiguar si se trata de IE y obtener el número de versión)?

Respuesta

16

Puede ejecutar este

var ie = (function() { 
    var undef, v = 3, div = document.createElement('div'); 

    while (
     div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->', 
     div.getElementsByTagName('i')[0] 
    ); 

    return v > 4 ? v : undef; 
}()); 

para detectar la versión de IE.

Fuente:http://ajaxian.com/archives/attack-of-the-ie-conditional-comment

Y luego

if (ie < 9) { 
    // do your stuff, for instance: 
    window.location = 'http://getfirefox.com'; // :p 
} 
+0

LOL Debería haber sabido que James Padolsey lo descubrió hace más de un año :) ¡gracias! – Mottie

+0

Recuerdo haber visto a Rangy antes ... pero creo que no estaba funcionando con textareas, tal vez tenga que volver a verlo desde que salió una nueva versión este mes. ¡Gracias de nuevo! – Mottie

2

Usted no ha mencionado explícitamente en su pregunta por qué tuvo una necesidad específica para detectar de IE9, por lo que, en general, el siguiente consejo es:

En lugar de detectar un navegador/versión específico, en su lugar debería detectar características específicas. Modernizr es un buen lugar para comenzar para obtener ayuda con esto.

+0

A veces, hay cosas que IE no admite que no pueda usar JavaScript para verificar. Al igual que las cosas de CSS. –

+0

El plugin en el que estoy trabajando necesita posicionar el cursor dentro de un área de texto ... IE9 parece funcionar bien sin ninguna modificación del cursor, pero las versiones anteriores simplemente no se comportan. – Mottie

+0

@fudgey Considere [Rangy] (http://code.google.com/p/rangy/) –

1

¿Qué tal esto:

if (!($.browser.msie && $.browser.version < 9.0)) { 
    // Apply only to IE8 and lower 
} 

Tenga en cuenta que Internet Explorer 8 se muestra como IE7

+0

Intento evitar el rastreo del navegador como se menciona en mi pregunta. – Mottie

+5

$ .browser está en desuso de 1.3 y eliminado de 1.9 –

+1

Solo quiero que los futuros lectores sepan que la respuesta que están viendo podría no funcionar ahora/en el futuro. No entiendo tu punto de frustración –

1

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx Ver el enlace de arriba, esto podría ser la respuesta oficial :) En pocas palabras, el código siguiente en su html página.

<!--[if gte IE 9]> 
<p>You're using a recent version of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<!--[if lt IE 9]> 
<p>Hm. You should upgrade your copy of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<![if !IE]> 
<p>You're not using Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]> 
+0

Sí, pero estaba preguntando cómo hacerlo programáticamente con javascript ... los autores de complementos no pueden esperar que cada página tenga comentarios condicionales en su lugar, por lo que debemos agregarlos por nuestra cuenta. – Mottie

Cuestiones relacionadas