it-swarm.it

Quando è necessaria una sezione CDATA all'interno di un tag script?

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

In altre parole, quando e dove si trova questo:

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

preferibile a questo:

<script type="text/javascript">
...code...
</script>
871
brad

Una sezione CDATA è necessaria se hai bisogno che il tuo documento venga analizzato come XML (es. Quando una pagina XHTML è interpretata come XML) e vuoi essere in grado di scrivere i<10 e a && b letterali invece di i&lt;10 e a &amp;&amp; b, as XHTML analizzerà il codice JavaScript come dati di carattere analizzati rispetto ai dati di carattere per impostazione predefinita. Questo non è un problema con script che sono archiviati in file di origine esterni, ma per qualsiasi JavaScript inline in XHTML sarà probabilmente si desidera utilizzare una sezione CDATA.

Nota che molte pagine XHTML non sono mai state intese per essere analizzate come XML, nel qual caso questo non sarà un problema.

Per una buona scrittura sull'argomento, vedere https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

567
Michael Ridley

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 si desidera che il markup XHTML 1.0 (ad esempio) venga convalidato.

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

HTML

Un parser HTML tratterà tutto tra <script> e </script> come parte dello script. Alcune implementazioni non hanno nemmeno bisogno di un tag di chiusura corretto; interrompono l'interpretazione di script in "</", che è corretta secondo le specifiche.

Aggiorna In HTML5, e con i browser correnti, non è più il caso.

Quindi, in HTML, questo è not possible:

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

Una sezione CDATA ha nessun effetto . Ecco perché è necessario 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 è principalmente vero.)

XML

In XML, si applicano regole diverse. Nota che i browser (non IE) usano solo un parser XML se il documento XHMTL è servito con un tipo di contenuto XML.

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

Quindi, in XHTML, questo è non possibile:

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

Per ovviare a questo, è possibile racchiudere l'intero script in una sezione CDATA. Questo dice al parser: 'In questa sezione, non trattare "<" e "&" come caratteri di controllo .' Per impedire al motore JavaScript di interpretare i segni "<![CDATA[" e "]]>", è possibile includerli nei commenti.

Se il tuo script non contiene alcun "<" o "&", non hai comunque bisogno di una sezione CDATA.

121
user123444555621

Fondamentalmente è permettere di scrivere un documento che sia sia XHTML che HTML. Il problema è che all'interno di XHTML, il parser XML interpreterà i caratteri &, <,> nel tag script e causerà l'errore 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 script è considerato CDATA 'di default', e tale JavaScript non verrà eseguito. Pertanto, se vuoi che la stessa pagina sia OK sia usando i parser XHTML che HTML, devi includere il tag script nell'elemento CDATA in XHTML, ma NON includerlo 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 del JavaScript) lo rileva e tratta il resto fino alla fine del CDATA come CDATA.

30
ondra

È una cosa X (HT) ML. Quando utilizzi simboli come < e > all'interno del codice JavaScript, ad es. per il confronto di due interi, questo dovrebbe essere analizzato come XML, quindi dovrebbero segnare come inizio o fine di un tag.

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

23
Franz

Do not usa CDATA in HTML4 ma tu dovrebbe usa CDATA in XHTML e deve usa CDATA in XML se hai simboli senza escape come <e>.

18
Loren Segal

Garantisce che la convalida XHTML funzioni correttamente quando si ha JavaScript incorporato nella pagina, piuttosto che referenziato esternamente.

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

Con le pagine HTML sul Web puoi semplicemente includere il codice JavaScript richiesto tra tag e tag. Quando si convalida l'HTML sulla pagina Web, il contenuto JavaScript è considerato CDATA (dati carattere) che viene quindi ignorato dal validatore. Lo stesso non è vero se segui gli standard XHTML più recenti nella configurazione della tua pagina web. Con XHTML il codice tra i tag dello script è considerato come PCDATA (dati di carattere analizzato) che viene quindi elaborato dal validatore.

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

Puoi imparare maggiori informazioni su CDATA qui , e più su XHTML qui .

17
LBushkin

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

Ecco una spiegazione su wikipedia

10
Alex Beardsley

Quando si ha una conformità XHTML severa, è necessario che il CDATA sia inferiore a quello e le e commerciali non siano contrassegnate come caratteri non validi.

9
Chris Shaffer

per evitare errori xml durante la convalida xhtml.

8
gehsekky

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

8
Ikaso

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

6
Jim

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

Referenze

5
Paul Sweatte

Quando vuoi che si convalidi (in XML/XHTML - grazie, Loren Segal ).

2
ceejayoz

In questo modo il browser più vecchio non analizza il codice Javascript e la pagina non si interrompe.

Compatibilità all'indietro. Devi amarlo.

2
Tyler Carter