2012-08-14 13 views
6

Ho una sceneggiatura voglio correre in tutti i browser tranne versioni di IE sotto 9, ovviamente, questo istruzioni condizionali lavora per IE:più istruzioni condizionali in <head> di documento

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

Ma quel codice è quindi non eseguito in nessun altro browser tranne IE9.

Esiste un modo per utilizzare più istruzioni condizionali insieme, ad es.

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

Si è sufficiente aggiungere una classe al corpo quando è IE8 o meno e non eseguire lo script solo quando viene rilevata la classe. – elclanrs

risposta

4

si utilizza un commento condizionale come questo:

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

Esistono due tipi di commenti condizionali: quelli in cui l'intero blocco viene commentato da tutti i browser (la prima versione precedente) e quelli in cui solo la "condizione" viene commentata (questa versione qui).

Quindi tutti i browser non IE vedono <script></script> fuori dai commenti, IE prima che v9 analizzi i commenti e sappia ignorare quell'HTML.

0

Penso che questa pagina vi possono aiutare:

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

In particolare:

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

Sarebbe preferibile utilizzare il rilevamento delle funzioni anziché i commenti condizionali. Per esempio secondo la documentazione di Microsoft trovato here Internet Explorer 10 sarà completamente ignorare eventuali commenti condizionali nello script come ad esempio:

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

È possibile correggere questo con l'aggiunta:

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

Ma questo non è un lungo soluzione a termine.

+0

Perché il supporto di IE10 viene rilasciato per le istruzioni condizionali? Le affermazioni condizionali sono davvero pessime: S – Sean

+0

Inoltre, potresti spiegare cosa intendi per rilevamento di funzioni?Penso che potrei capire, ma non sicuro al 100% – Sean

+0

Il motivo per cui Microsoft fornisce su quel collegamento ho fornito una migliore interoperabilità e conformità con HTML5. – Bruno

2

È possibile utilizzare gli operatori logici per "unire" istruzioni condizionali come [if (gt IE 5)&(lt IE 7)] o [if (IE 6)|(IE 7)] come spiegato here.

L'utilizzo di istruzioni condizionali a contenuto di commenti fuori sembra confuso, mi chiedo perché così tante risposte lo hanno suggerito. Questa è la notazione ho familiarità con, 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]--> 

Questa sintassi stato raccomandato in MS specs, con più funzioni come personalizzato di rilevamento versione vettoriale. Tenete presente che, a tutti gli effetti, IE10 verrà rilevato come un browser non IE e deve essere referenziato come tale (si spera che non vi siano altre stranezze significative da richiedere l'indirizzamento con affermazioni condizionali in primo luogo)

Problemi correlati