Когда раздел CDATA необходим в теге скрипта?
являются ли теги CDATA когда-либо необходимыми в тегах скриптов, и если да, то когда?
другими словами, когда и где это:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
лучше чем вот это:
<script type="text/javascript">
...code...
</script>
15 ответов:
раздел CDATA требуется, если вам нужно, чтобы ваш документ анализировался как XML (например, когда страница XHTML интерпретируется как XML) и вы хотите иметь возможность писать литерал
i<10
иa && b
вместоi<10
иa && b
, поскольку XHTML будет анализировать код JavaScript как проанализированные символьные данные, а не символьные данные по умолчанию. Это не проблема со скриптами, которые хранятся во внешних исходных файлах, но для любого встроенного JavaScript в XHTML вы будете наверное хотите использовать раздел CDATA.обратите внимание, что многие страницы XHTML никогда не предназначались для анализа как XML, и в этом случае это не будет проблемой.
для хорошей записи по этому вопросу см. http://javascript.about.com/library/blxhtml.htm
когда браузеры обрабатывают разметку как XML:
<script> <![CDATA[ ...code... ]]> </script>
когда браузеры обрабатывают разметку как HTML:
<script> ...code... </script>
когда браузеры обрабатывают разметку как HTML, и вы хотите, чтобы ваша разметка XHTML 1.0 (например) проверялась.
<script> //<![CDATA[ ...code... //]]> </script>
HTML
парсер HTML будет обрабатывать все между
<script>
и</script>
как часть сценария.некоторые реализации даже не нуждаются в правильном закрывающем теге; они останавливают интерпретацию скрипта на ".</
", что правильно в соответствии с технические характеристикиобновление в HTML5 и с текущими браузерами это уже не так.
Итак, в HTML, это не можно:
<script> var x = '</script>'; alert(x) </script>
A и нет эффекта вообще. Вот почему вам нужно написать
var x = '<' + '/script>'; // or var x = '<\/script>';
или аналогичные.
это также относится к файлам XHTML, которые используются как
text/html
. (Поскольку IE не поддерживает типы контента XML, это в основном верно.)XML
в XML применяются другие правила. Обратите внимание, что (не IE) браузеры используют только синтаксический анализатор XML, если документ XHMTL подается с XML тип содержимого.
для синтаксического анализатора XML, a
script
тег не лучше, чем любой другой тег. В частности, узел скрипта может содержать нетекстовые дочерние узлы, вызванные "<
" и "&
" знак обозначает сущность символа.Итак, в XHTML, это не можно:
<script> if (a<b && c<d) { alert('Hooray'); } </script>
чтобы обойти это, вы можете обернуть весь скрипт в . Это говорит парсер: в этом разделе, не лечим "
<
" и "&
" как управляющие символы.'Чтобы предотвратить интерпретацию движка JavaScript "<![CDATA[
" и "]]>
" марки, вы можете обернуть их в комментариях.если ваш скрипт не содержит каких-либо "
<
" или "&
", вам не нужно в любом случае.
в основном это позволяет писать документ, который является одновременно XHTML и HTML. Проблема в том, что в XHTML синтаксический анализатор XML будет интерпретировать символы &, в скрипт тег и вызвать ошибку синтаксического анализа XML. Таким образом, вы можете написать свой JavaScript с лица, например:
if (a > b) alert('hello world');
но это непрактично. Большая проблема заключается в том, что если Вы читаете страницу в HTML, тег скрипт считается CDATA 'по умолчанию', и такой JavaScript не будет работать. Поэтому, если вы хотите, чтобы одна и та же страница была в порядке как с помощью парсеров XHTML, так и HTML, вам нужно заключить скрипт тег в элементе CDATA в XHTML, но не заключать его в HTML.
этот трюк отмечает начало элемента CDATA как комментарий JavaScript; в HTML синтаксический анализатор JavaScript игнорирует тег CDATA (это комментарий). В XHTML синтаксический анализатор XML (который запускается до JavaScript) обнаруживает его и обрабатывает остальные до конца CDATA как CDATA.
Это X (HT)ML вещь. Когда вы используете символы, такие как
<
и>
в JavaScript, например, для сравнения двух целых чисел, это должно быть проанализировано как XML, таким образом, они будут помечены как начало или конец тега.CDATA означает, что следующие строки (все до
]]>
не является XML и поэтому не должен быть проанализирован таким образом.
Do не используйте CDATA в HTML4, но вы должны используйте CDATA в XHTML и должны использовать CDATA в XML, если у вас есть неэкранированные символы, такие как .
Это гарантирует, что проверка XHTML работает правильно, когда у вас есть JavaScript, встроенный в вашу страницу, а не внешние ссылки.
XHTML требует, чтобы ваша страница строго соответствовала требованиям разметки XML. Поскольку JavaScript может содержать символы со специальным значением, вы должны обернуть его в CDATA, чтобы убедиться, что проверка не помечает его как искаженный.
с HTML страниц в интернете вы можете просто включить необходимые В JavaScript между тегами. При проверке HTML на веб-странице содержимое JavaScript считается CDATA (символьные данные), которые поэтому игнорируются валидатором. То же самое неверно, если вы следуете более поздним стандартам XHTML при настройке своей веб-страницы. С помощью XHTML код между тегами скрипта считается PCDATA (parsed character data), который поэтому обрабатывается валидатором.
из-за этого вы не можете просто включить JavaScript между тегами скрипта на Вашей странице без "взлома" вашей веб-страницы (по крайней мере, насколько это касается валидатора).
вы можете узнать подробнее о CDATA здесь и подробнее о XHTML здесь.
когда вы собираетесь для строгого соответствия XHTML, вам нужно CDATA так меньше, чем и амперсанды не помечены как недопустимые символы.
CDATA указывает, что содержимое внутри не XML.
вот объяснение на Википедия
CDATA необходим в любом диалекте XML, потому что текст в XML-узле обрабатывается как дочерний элемент перед вычислением как JavaScript. Это также причина, почему JSLint жалуется о
<
символ в регулярных выражений.ссылки
когда вы хотите, чтобы проверить (в XML / XHTML-спасибо,Лорен Сигал).