Когда раздел CDATA необходим в теге скрипта?


являются ли теги CDATA когда-либо необходимыми в тегах скриптов, и если да, то когда?

другими словами, когда и где это:

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

лучше чем вот это:

<script type="text/javascript">
...code...
</script>
15 845

15 ответов:

раздел CDATA требуется, если вам нужно, чтобы ваш документ анализировался как XML (например, когда страница XHTML интерпретируется как XML) и вы хотите иметь возможность писать литерал i<10 и a && b вместо i&lt;10 и a &amp;&amp; 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 &gt; 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.

вот объяснение на Википедия

чтобы избежать ошибок xml во время проверки xhtml.

CDATA говорит браузеру отображать текст как есть, а не отображать его как HTML.

CDATA указывает, что содержимое внутри не XML.

CDATA необходим в любом диалекте XML, потому что текст в XML-узле обрабатывается как дочерний элемент перед вычислением как JavaScript. Это также причина, почему JSLint жалуется о < символ в регулярных выражений.

ссылки

таким образом, старый браузер не анализирует код Javascript, и страница не ломается.

назад compatability. Должно быть, нравится.