2012-08-14 11 views
6

Tengo un guión que desea ejecutar en todos los navegadores excepto las versiones de IE por debajo de 9, obviamente, esto sentencias condicionales funciona para IE:sentencias condicionales múltiples en <head> del documento

<!--[if gt IE 8]> 
    JavaScript stuff here 
<![endif]--> 

Pero ese código es luego no se ejecuta en ningún otro navegador excepto IE9.

¿Hay alguna manera de usar declaraciones condicionales múltiples juntas, p.

<!--[if gt IE 8 OR !IE]> 
    JavaScript stuff here 
<![endif]--> 
+2

Usted podría simplemente agregar una clase al cuerpo cuando IE8 o menos y solo no ejecutar el script cuando se detecta la clase. – elclanrs

Respuesta

4

utiliza un comentario condicional como esto:

<!--[if gte IE 9]><!--> 
    <script></script> 
<!--<![endif]--> 

Hay dos tipos de comentarios condicionales: aquellos en los que se comenta el bloque completo de todos los navegadores (su primera versión arriba) y aquellos donde solo se comenta la "condición" (esta versión aquí).

Así que todos los navegadores que no sean IE ven <script></script> fuera de los comentarios, IE antes de v9 analiza los comentarios y sabe que debe ignorar ese HTML.

0

creo que esta página le ayudará a cabo:

http://www.cssplay.co.uk/menu/conditional.html

Específicamente:

I have found that the following code will allow you to target non-IE browsers 

<!--[if !IE]><!--> 
<h1>You are NOT using Internet Explorer</h1> 
<!--<![endif]--> 

..and finally to target non-IE and a specific IE browser 
(or any combinations using lte lt or gt gte). 

<!--[if IE 6]><!--> 
<h1>You are using EITHER Internet Explorer version 6<br /> 
OR a non-IE browser</h1> 
<!--<![endif]--> 
<h1>You are using 
<!--[if IE 6]>IE6 and not <!--> 
a non-IE browser 
<!--<![endif]--></h1> 
2

Sería preferible usar la detección de característica en lugar de comentarios condicionales. Por ejemplo, según la documentación de Microsoft encontrado here Internet Explorer 10 se ignoran por completo los comentarios condicionales en su secuencia de comandos como:

<!--[if IE]> 
    This content is ignored in IE10. 
    <![endif]--> 

Puede asignar esto añadiendo:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"> 

Pero esto no es mucho solución a largo plazo.

+0

¿Por qué es IE10 cayendo soporte para instrucciones condicionales? ¿Las afirmaciones condicionales son realmente tan malas? S – Sean

+0

¿Podría explicar qué quiere decir con detección de características?Creo que podría entender, pero no estoy 100% seguro – Sean

+0

La razón por la que Microsoft brinda en ese enlace que brindé para mejorar la interoperabilidad y el cumplimiento con HTML5. – Bruno

2

Puede usar operadores lógicos para "unir" sentencias condicionales como [if (gt IE 5)&(lt IE 7)] o [if (IE 6)|(IE 7)] como se explica en here.

Usando declaraciones condicionales a comentario contenido fuera parece confuso, me pregunto por qué tantas respuestas sugirieron eso. Esta es la notación que estoy familiarizado, con more examples on quirksmode:

<!--[if IE]> 
According to the conditional comment this is IE<br /> 
<![endif]--> 
<!--[if !IE]> --> 
According to the conditional comment this is not IE<br /> 
<!-- <![endif]--> 

Esta sintaxis sido recomendado in MS specs, con más funciones, como detección de la versión vectorial personalizada. Sin embargo, tenga en cuenta que, para todos los efectos, IE10 se detectará como un navegador que no es de IE y se debe hacer referencia a él como una sola (esperemos que no existan más caprichos importantes que requieran direccionamiento con enunciados condicionales)

Cuestiones relacionadas