it-swarm-eu.dev

Kdy je v tagu skriptu nutná sekce CDATA?

Jsou tagy CDATA vždy nutné ve značkách skriptů a pokud ano, kdy?

Jinými slovy, kdy a kde je toto:

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

vhodnější než toto:

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

Část CDATA je vyžadována, pokud potřebujete dokument analyzovat jako XML (např. Když je stránka XHTML interpretována jako XML) a chcete mít možnost psát literální i<10 a a && b místo i&lt;10 a a &amp;&amp; b, protože XHTML bude analyzovat kód JavaScript jako analyzovaná znaková data na rozdíl od znakových dat ve výchozím nastavení. Toto není problém se skripty, které jsou uloženy v externích zdrojových souborech, ale pro všechny inline JavaScript v XHTML budete pravděpodobně chtít použít sekci CDATA.

Všimněte si, že mnoho stránek XHTML nebylo nikdy zamýšleno k analýze jako XML, v tomto případě to nebude problém.

Pro dobré psaní na toto téma viz https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

568
Michael Ridley

Když prohlížeče považují značení za XML:

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

Když prohlížeče považují značení za HTML:

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

Když prohlížeče považují značení za HTML a chcete, aby vaše označení XHTML 1.0 (například) bylo ověřeno.

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

HTML

Analyzátor HTML bude považovat vše mezi <script> a </script> jako součást skriptu. Některé implementace nepotřebují ani správnou zavírací značku; zastaví interpretaci skriptu na "</", což je správné podle spec.

Aktualizace V HTML5 as aktuálními prohlížeči už tomu tak není.

Takže v HTML je to ne možné:

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

Sekce CDATA žádný účinek vůbec . Proto musíte psát

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

nebo podobné.

To platí i pro XHTML soubory sloužící jako text/html. (Jelikož IE nepodporuje typy obsahu XML, je to většinou pravda.

XML

V XML platí různá pravidla. Všimněte si, že prohlížeče (ne IE) používají analyzátor XML pouze v případě, že je dokument XHMTL doručován s typem obsahu XML.

Pro analyzátor XML není tag script lepší než kterýkoli jiný tag. Zejména uzel skriptu může obsahovat netextové podřízené uzly spuštěné příkazem "<"; a znak "&" označuje znakovou entitu.

Takže v XHTML to je není možné:

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

Chcete-li tento problém vyřešit, můžete celý skript zabalit do sekce CDATA. To říká syntaktickému analyzátoru: „V této sekci nepovažujte„ < “a„ & “za kontrolní znaky . ' Chcete-li zabránit JavaScriptu v interpretaci značek "<![CDATA[" a "]]>", můžete je zabalit do komentářů.

Pokud váš skript neobsahuje žádné "<" nebo "&", nepotřebujete sekci CDATA.

121
user123444555621

V podstatě je to umožnit psát dokument, který je jak XHTML, tak HTML. Problém je v tom, že v XHTML bude XML analyzátor interpretovat znaky &, <,> v tagu script a způsobit chybu analýzy XML. Můžete tedy napsat svůj JavaScript s entitami, např .:

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

Ale to je nepraktické. Větší problém spočívá v tom, že pokud si přečtete stránku v HTML, tag script je ve výchozím nastavení považován za CDATA 'a takový JavaScript se nespustí. Pokud tedy chcete, aby byla stejná stránka v pořádku, a to jak pomocí analyzátorů XHTML, tak i HTML, je třeba, abyste značku script vložili do elementu CDATA v XHTML, ale NEZAPÍNAJTE ji v HTML.

Tento trik označuje začátek prvku CDATA jako komentář JavaScriptu; v HTML JavaScript analyzátor ignoruje značku CDATA (je to komentář). V XHTML, XML parser (který je spuštěn před JavaScript) detekuje to a zachází se zbytkem až do konce CDATA jako CDATA.

30
ondra

Je to věc X (HT) ML. Při použití symbolů jako < a > uvnitř JavaScriptu, např. pro porovnání dvou celých čísel by to muselo být analyzováno jako XML, takže by označili jako začátek nebo konec značky.

CDATA znamená, že následující řádky (vše až po ]]> není XML a neměly by tedy být takto analyzovány).

23
Franz

Do not použijte CDATA v HTML4, ale should použijte CDATA v XHTML a must použijte CDATA ve formátu XML, pokud máte nezmenené symboly jako <a>.

18
Loren Segal

Zajistěte, aby ověřování XHTML fungovalo správně, pokud máte na stránce vložený JavaScript, a nikoli externě.

XHTML vyžaduje, aby vaše stránka přesně odpovídala požadavkům značek XML. Protože JavaScript může obsahovat znaky se zvláštním významem, musíte jej zabalit do CDATA, abyste zajistili, že ověření nebude označeno jako chybné.

S HTML stránkami na webu můžete mezi tagy a tagy pouze zahrnout požadovaný JavaScript. Když ověřujete HTML na své webové stránce, obsah JavaScriptu je považován za CDATA (znaková data), která je proto validátorem ignorována. Totéž neplatí, pokud se při nastavování webové stránky budete řídit nejnovějšími standardy XHTML. S XHTML je kód mezi tagy skriptu považován za PCDATA (analyzovaná znaková data), která je proto zpracována validátorem.

Z tohoto důvodu nemůžete pouze zahrnout JavaScript mezi tagy skriptu na vaší stránce, aniž byste „porušili“ vaši webovou stránku (alespoň pokud jde o validátor).

Můžete se naučit více o CDATA zde a více o XHTML zde .

17
LBushkin

CDATA označuje, že obsah uvnitř není XML.

Zde je vysvětlení wikipedia

10
Alex Beardsley

Pokud se chystáte na přísnou shodu s XHTML, potřebujete CDATA tak, aby méně než a ampersandy nebyly označeny jako neplatné znaky.

9
Chris Shaffer

vyhnout se chybám xml během ověřování xhtml.

8
gehsekky

CDATA říká prohlížeči, aby zobrazoval text tak, jak je, a ne aby jej vykreslil jako HTML.

8
Ikaso

CDATA označuje, že obsah uvnitř není XML.

6
Jim

CDATA je nutné v každém dialektu XML, protože text v uzlu XML je považován za podřízený prvek, než je vyhodnocen jako JavaScript. To je také důvod, proč JSLint si stěžuje o znaku < v regexes.

Odkazy

5
Paul Sweatte
2
ceejayoz

Tímto starším prohlížečem nelze analyzovat kód Javascriptu a stránka se nezlomí.

Zpětná kompatibilita. Musím to milovat.

2
Tyler Carter