2010-11-19 10 views
14
<script type="text/javascript"> 
    function test() { 
     alert('&lt;span&gt;blah&lt;span&gt;'); 
    } 
</script> 
<a href="#" onclick="test();">First</a><br /> 
<a href="#" onclick="alert('&lt;span&gt;blah&lt;span&gt;');">Second</a><br /> 
Third: &lt;span&gt;blah&lt;span&gt; 

Demo: http://jsfiddle.net/LPYTZ/Le entità HTML all'interno del tag dello script non sono state convertite?

Perché è il primo risultato diverso? I tag <script> sono in qualche modo esclusi dalla conversione di entità?

risposta

21

In HTML, gli elementi di stile e di script sono defined in the DTD as containing CDATA. Ciò significa che entità e tag vengono ignorati fino a quando il parser non colpisce qualcosa che assomiglia a un tag di chiusura.

XHTML is different e entità e tag all'interno di tali elementi funzionano normalmente, ma solo se analizzati come XHTML. È possibile contrassegnare esplicitamente il contenuto come CDATA con <![CDATA[ … ]]>.

I browser considereranno XHTML come testo/html utilizzando le regole HTML che portano a una grossa palla di cattivo mentre si tenta di scrivere codice corretto in entrambe le serie di regole.

Il modo più semplice per evitare problemi consiste nel mantenere gli script in file esterni e utilizzare l'attributo src per includerli.

+0

+1 Per menzionare anche XHTML. – Gumbo

+0

Come già * ho * XHTML (anche in jsfiddle) +1 per la parte "I browser tratteranno XHTML come testo/html usando le regole HTML". – AndreKR

+0

@AndreKR: È il tipo di supporto MIME che conta, non il contenuto. – Gumbo

10

Sì, il content model of STYLE and SCRIPT è speciale:

Sebbene le STYLE e SCRIPT elementi usano CDATA per il loro modello di dati, per questi elementi, CDATA devono essere trattati in modo diverso dai programmi utente. Markup ed entità devono essere trattati come testo non elaborato e passati all'applicazione così com'è. La prima occorrenza della sequenza di caratteri "</" (delimitatore di apertura del tag di chiusura) viene considerata terminata alla fine del contenuto dell'elemento. Nei documenti validi, questo sarebbe il tag di chiusura per l'elemento.

Problemi correlati