Czy znaczniki CDATA są kiedykolwiek potrzebne w znacznikach skryptów, a jeśli tak, to kiedy?
Innymi słowy, kiedy i gdzie to jest:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
lepiej niż to:
<script type="text/javascript">
...code...
</script>
javascript
html
xhtml
cdata
ćwiek
źródło
źródło
Odpowiedzi:
Sekcja CDATA jest wymagana, jeśli potrzebujesz, aby Twój dokument był analizowany jako XML (np. Gdy strona XHTML jest interpretowana jako XML) i chcesz mieć możliwość pisania literału
i<10
ia && b
zamiast,i<10
aa && b
ponieważ XHTML będzie analizował kod JavaScript jako analizowane dane znakowe w przeciwieństwie do danych znaków domyślnie. Nie jest to problem ze skryptami przechowywanymi w zewnętrznych plikach źródłowych, ale dla każdego wbudowanego JavaScript w XHTML prawdopodobnie będziesz chciał użyć sekcji CDATA.Zauważ, że wiele stron XHTML nigdy nie było analizowanych jako XML, w którym to przypadku nie będzie problemu.
Dobry opis na ten temat można znaleźć na stronie https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm
źródło
&
i<
znaków, nie trzeba sekcji CDATA; będzie działać dobrze zarówno w HTML, jak i XHTML. Możesz to łatwo osiągnąć, umieszczając cały znaczący kod w zewnętrznych skryptach i po prostu używając skryptów wbudowanych np. zainicjuj zmienne ( jeśli potrzebujesz, wstawianie znaków ucieczki&
/<
do\x26
/\x3C
w literałach łańcuchowych).Gdy przeglądarki traktują znaczniki jako XML:
Gdy przeglądarki traktują znaczniki jako HTML:
Gdy przeglądarki traktują znaczniki jako HTML i chcesz, aby znaczniki XHTML 1.0 (na przykład) były sprawdzane.
źródło
/* ... */
ponieważ w przeciwnym razie usunięcieHTML
Parser HTML potraktuje wszystko pomiędzy
<script>
i</script>
jako część skryptu.Niektóre implementacje nawet nie wymagają poprawnego tagu zamykającego; zatrzymują interpretację skryptu na „.</
”, co jest poprawne zgodnie ze specyfikacjąW HTML nie jest to możliwe:
CDATA
Sekcja ma żadnego efektu . Dlatego musisz pisaćlub podobne.
Dotyczy to również plików XHTML obsługiwanych jako
text/html
. (Ponieważ IE nie obsługuje typów treści XML, jest to w większości prawdą).XML
W XML obowiązują inne reguły. Uwaga: przeglądarki (inne niż IE) używają analizatora składni XML tylko wtedy, gdy dokument XHMTL jest obsługiwany z typem treści XML.
Dla parsera XML
script
znacznik nie jest lepszy niż jakikolwiek inny znacznik. W szczególności węzeł skryptowy może zawierać nietekstowe węzły potomne, uruchamiane przez „<
”; a znak „&
” oznacza byt postaci.W XHTML nie jest to możliwe:
Aby obejść ten problem, możesz zawinąć cały skrypt w
CDATA
sekcję. Mówi to parserowi: „W tej sekcji nie traktuj„<
”i„&
”jako znaków kontrolnych .” Aby uniemożliwić silnikowi JavaScript interpretację znaków „<![CDATA[
” i „]]>
”, możesz zawinąć je w komentarze.Jeśli twój skrypt nie zawiera żadnych „
<
” ani „&
”, i tak nie potrzebujesz żadnejCDATA
sekcji.źródło
</
wewnętrzne tagi skryptu są złe.<script>var b = "<b>bold</b>";</script>
nie można zweryfikować, ale po przeczytaniu twojej odpowiedzi i zmianie na<script>var b = "<b>bold<\/b>";</script>
naprawioną.Zasadniczo pozwala on napisać dokument, który jest zarówno XHTML, jak i HTML. Problem polega na tym, że w XHTML parser XML interpretuje znaki &, <,> w znaczniku skryptu i powoduje błąd analizy XML. Możesz więc napisać JavaScript przy pomocy encji, np .:
Ale to jest niepraktyczne. Większy problem polega na tym, że jeśli czytasz stronę w HTML, skrypt znacznika jest domyślnie uznawany za CDATA i taki JavaScript nie będzie działał. Dlatego jeśli chcesz, aby ta sama strona działała poprawnie zarówno przy użyciu parserów XHTML, jak i HTML, musisz umieścić znacznik skryptu w elemencie CDATA w XHTML, ale NIE należy go umieszczać w HTML.
Ta sztuczka oznacza początek elementu CDATA jako komentarz JavaScript; w HTML parser JavaScript ignoruje znacznik CDATA (jest to komentarz). W XHTML parser XML (uruchamiany przed JavaScript) wykrywa go i traktuje resztę do końca CDATA jako CDATA.
źródło
To jest X (HT) ML. Gdy używasz symboli takich jak
<
i>
wewnątrz JavaScript, np. Do porównywania dwóch liczb całkowitych, musiałoby to zostać przeanalizowane jak XML, a zatem oznaczałoby to początek lub koniec znacznika.CDATA oznacza, że następujące wiersze (wszystko do
]]>
pliku nie jest XML i dlatego nie powinny być analizowane w ten sposób.źródło
Czy nie używać CDATA w HTML4 ale należy użyć CDATA w XHTML i musi użyć CDATA w XML, jeśli masz kodów zmiany znaczenia symboli, takich jak <i>.
źródło
Ma to na celu zapewnienie, że sprawdzanie poprawności XHTML działa poprawnie, gdy JavaScript jest osadzony na stronie, a nie zewnętrznie.
XHTML wymaga, aby strona była ściśle zgodna z wymaganiami znaczników XML. Ponieważ JavaScript może zawierać znaki o specjalnym znaczeniu, musisz owinąć go w CDATA, aby upewnić się, że sprawdzanie poprawności nie oznaczy go jako zniekształcony.
Możesz dowiedzieć się więcej o CDATA tutaj , a więcej o XHTML tutaj .
źródło
CDATA wskazuje, że zawarta w nim zawartość nie jest XML.
Oto wyjaśnienie na Wikipedii
źródło
Jeśli dążysz do ścisłej zgodności z XHTML, potrzebujesz CDATA, więc mniej niż i znaki ampersand nie są oznaczane jako nieprawidłowe znaki.
źródło
aby uniknąć błędów xml podczas sprawdzania poprawności xhtml.
źródło
CDATA mówi przeglądarce, aby wyświetlała tekst w obecnej postaci i nie renderowała go jako HTML.
źródło
CDATA wskazuje, że zawarta w nim zawartość nie jest XML.
źródło
CDATA jest niezbędny w każdym dialekcie XML, ponieważ tekst w węźle XML jest traktowany jako element potomny, zanim zostanie oceniony jako JavaScript. Jest to również powód, dla którego JSLint narzeka na
<
postać w wyrażeniach regularnych .Bibliografia
źródło
Kiedy chcesz to sprawdzić (w XML / XHTML - dzięki, Loren Segal ).
źródło
W ten sposób starsza przeglądarka nie analizuje kodu JavaScript, a strona się nie psuje.
Kompatybilność wsteczna. Uwielbiam to.
źródło