Domanda

I tag CDATA sono mai necessari nei tag di script e, in caso affermativo, quando?

In altre parole, quando e dove è questo:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

preferibile a questo:

<script type="text/javascript">
...code...
</script>
È stato utile?

Soluzione

Una sezione CDATA è necessaria se hai bisogno che il tuo documento venga analizzato come XML (ad es.quando una pagina XHTML viene interpretata come XML) e vuoi essere in grado di scrivere in modo letterale i<10 E a && b invece di i&lt;10 E a &amp;&amp; b, poiché XHTML analizzerà il codice JavaScript come dati di carattere analizzati anziché dati di carattere per impostazione predefinita.Questo non è un problema con gli script archiviati in file sorgente esterni, ma per qualsiasi JavaScript in linea in XHTML lo farai probabilmente desidera utilizzare una sezione CDATA.

Tieni presente che molte pagine XHTML non sono mai state pensate per essere analizzate come XML, nel qual caso questo non costituirà un problema.

Per un buon articolo sull'argomento, vedere https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

Altri suggerimenti

Quando i browser trattano il markup come XML:

<script>
<![CDATA[
    ...code...
]]>
</script>

Quando i browser trattano il markup come HTML:

<script>
    ...code...
</script>

Quando i browser trattano il markup come HTML e desideri che il markup XHTML 1.0 (ad esempio) venga convalidato.

<script>
//<![CDATA[
    ...code...
//]]>
</script>

HTML

Un parser HTML tratterà tutto ciò che c'è in mezzo <script> E </script> come parte della sceneggiatura. Alcune implementazioni non necessitano nemmeno di un tag di chiusura corretto;interrompono l'interpretazione della sceneggiatura in "</", che è corretto secondo il Specifiche.

Aggiornamento In HTML5 e con i browser attuali non è più così.

Quindi, in HTML, questo è non possibile:

<script>
var x = '</script>';
alert(x)
</script>

UN CDATA la sezione ha nessun effetto.Ecco perché devi scrivere

var x = '<' + '/script>'; // or
var x = '<\/script>';

o simili.

Questo vale anche per i file XHTML serviti come text/html.(Poiché IE non supporta i tipi di contenuto XML, questo è per lo più vero.)

XML

In XML si applicano regole diverse.Tieni presente che i browser (non IE) utilizzano un parser XML solo se il documento XHMTL viene servito con un tipo di contenuto XML.

Per il parser XML, a script il tag non è migliore di qualsiasi altro tag.In particolare, un nodo script può contenere nodi figlio non di testo, attivati ​​da "<";e un "&" Il segno denota un'entità carattere.

Quindi, in XHTML, questo è non possibile:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Per risolvere questo problema, puoi racchiudere l'intero script in un file CDATA sezione.Questo dice al parser:'In questa sezione, non trattare"<" E "&" come caratteri di controllo. " Per impedire al motore JavaScript di interpretare il "<![CDATA[" E "]]>"marks, puoi inserirli nei commenti.

Se il tuo script non contiene alcun "<" O "&", non è necessario un file CDATA sezione comunque.

Fondamentalmente si tratta di consentire di scrivere un documento che sia sia XHTML che HTML.Il problema è che all'interno di XHTML, il parser XML interpreterà i caratteri &,<,> nel file sceneggiatura tag e causare errori di analisi XML.Quindi, puoi scrivere il tuo JavaScript con entità, ad esempio:

if (a &gt; b) alert('hello world');

Ma questo non è pratico.Il problema più grande è che se leggi la pagina in HTML, il tag sceneggiatura è considerato CDATA "per impostazione predefinita" e tale JavaScript non verrà eseguito.Pertanto, se si desidera che la stessa pagina funzioni sia utilizzando i parser XHTML che HTML, è necessario allegare il sceneggiatura tag nell'elemento CDATA in XHTML, ma NON per racchiuderlo in HTML.

Questo trucco segna l'inizio di un elemento CDATA come commento JavaScript;in HTML il parser JavaScript ignora il tag CDATA (è un commento).In XHTML, il parser XML (che viene eseguito prima di JavaScript) lo rileva e tratta il resto fino alla fine di CDATA come CDATA.

È una cosa X(HT)ML.Quando usi simboli come < E > all'interno di JavaScript, ad es.per confrontare due numeri interi, questi dovrebbero essere analizzati come XML, quindi verranno contrassegnati come inizio o fine di un tag.

Il CDATA significa che le righe seguenti (tutto fino al ]]> non è XML e quindi non deve essere analizzato in questo modo.

Fare non usa CDATA in HTML4 ma tu Dovrebbe utilizzare CDATA in XHTML e dovere usa CDATA in XML se hai simboli senza caratteri di escape come < e >.

Serve a garantire che la convalida XHTML funzioni correttamente quando hai JavaScript incorporato nella tua pagina, piuttosto che referenziato esternamente.

XHTML richiede che la tua pagina sia rigorosamente conforme ai requisiti di markup XML.Poiché JavaScript può contenere caratteri con significato speciale, è necessario racchiuderlo in CDATA per garantire che la convalida non lo segnali come non valido.

Con le pagine HTML sul Web puoi semplicemente includere il JavaScript richiesto tra i tag e .Quando convalidi l'HTML sulla tua pagina web, il contenuto JavaScript viene considerato CDATA (dati dei caratteri) che viene quindi ignorato dal validatore.Lo stesso non è vero se segui i più recenti standard XHTML nell'impostazione della tua pagina web.Con XHTML il codice tra i tag dello script è considerato PCDATA (parsed Character Data) che viene quindi elaborato dal validatore.

Per questo motivo, non puoi semplicemente includere JavaScript tra i tag di script sulla tua pagina senza "interrompere" la tua pagina web (almeno per quanto riguarda il validatore).

Si può imparare maggiori informazioni su CDATA qui, E maggiori informazioni su XHTML qui.

CDATA indica che i contenuti all'interno non sono XML.

Ecco una spiegazione in merito Wikipedia

Quando si desidera una rigorosa conformità XHTML, è necessario il CDATA quindi inferiore a e le e commerciali non vengono contrassegnate come caratteri non validi.

per evitare errori xml durante la convalida xhtml.

CDATA dice al browser di visualizzare il testo così com'è e di non visualizzarlo come HTML.

CDATA indica che i contenuti all'interno non sono XML.

CDATA è necessario in qualsiasi dialetto XML, poiché il testo all'interno di un nodo XML viene trattato come un elemento figlio prima di essere valutato come JavaScript.Questo è anche il motivo JSLint si lamenta riguardo a < carattere nelle espressioni regolari.

Riferimenti

In questo modo i browser più vecchi non analizzano il codice Javascript e la pagina non si interrompe.

Compatibilità con le versioni precedenti.Devi amarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top