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

В тегах script всегда нужны метки CDATA, и если да, когда?

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

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

предпочтительнее:

<script type="text/javascript">
...code...
</script>
+837
15 сент. '08 в 20:52
источник поделиться
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

+551
15 сент. '08 в 20:54
источник

Связанные вопросы


Похожие вопросы

Когда браузер обрабатывает разметку как XML:

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

Когда браузер обрабатывает разметку как HTML:

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

Когда браузеры обрабатывают разметку как HTML и вы хотите, чтобы ваша разметка XHTML 1.0 (например) проверялась.

<script>
//<![CDATA[
    ...code...
//]]>
</script>
+224
15 сент. '08 в 20:58
источник

HTML

HTML-парсер будет обрабатывать все между <script> и </script> как часть script. Некоторым реализациям даже не нужен правильный закрывающий тег; они останавливают интерпретацию script на "</", что верно в соответствии с спецификациями.

Обновить В HTML5 и с текущими браузерами это уже не так.

Итак, в HTML это невозможно:

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

A CDATA имеет никакого эффекта вообще. Вот почему вам нужно написать

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

или аналогичный.

Это также относится к файлам XHTML, которые используются как text/html. (Так как IE не поддерживает типы содержимого XML, это в основном верно.)

XML

В XML применяются разные правила. Обратите внимание, что (не IE) браузеры используют только синтаксический анализатор XML, если документ XHMTL обслуживается с типом содержимого XML.

В парсер XML тег script не лучше, чем любой другой тег. В частности, script node может содержать нетекстовые дочерние узлы, вызванные "<"; а знак "&" обозначает объект символа.

Итак, в XHTML это невозможно:

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

Чтобы обойти это, вы можете обернуть весь script в разделе CDATA. Это говорит синтаксическому анализатору: "В этом разделе не обрабатывают" < "и" & "в качестве управляющих символов. ' Чтобы механизм JavaScript не интерпретировал метки" <![CDATA[ "и" ]]>", вы можете обернуть их комментариями.

Если ваш script не содержит никаких "<" или "&", вам все равно не нужен раздел CDATA.

+117
20 сент. '09 в 9:05
источник

В основном это разрешить запись документа, который является как XHTML, так и HTML. Проблема в том, что в XHTML анализатор XML будет интерпретировать символы &, <, > в теге script и вызывать ошибку анализа XML. Таким образом, вы можете написать свой JavaScript с объектами, например:

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

Но это непрактично. Большая проблема заключается в том, что если вы читаете страницу в HTML, тег script считается CDATA 'по умолчанию', и такой JavaScript не будет работать. Поэтому, если вы хотите, чтобы одна и та же страница была в порядке, используя синтаксические анализаторы XHTML и HTML, вам нужно заключить тег script в элемент CDATA в XHTML, но НЕ прилагать его в HTML.

Этот трюк обозначает начало элемента CDATA в качестве комментария JavaScript; в HTML парсер JavaScript игнорирует тег CDATA (это комментарий). В XHTML анализатор XML (который запускается перед JavaScript) обнаруживает его и обрабатывает остальные до конца CDATA как CDATA.

+29
01 мар. '10 в 19:26
источник

Это вещь X (HT) ML. Когда вы используете символы типа < и > в JavaScript, например. для сравнения двух целых чисел это должно быть проанализировано подобно XML, поэтому они будут отмечать как начало или конец тега.

CDATA означает, что следующие строки (все до ]]> не являются XML и поэтому не должны анализироваться таким образом.

+22
01 мар. '10 в 19:19
источник

Чтобы убедиться, что проверка правильности XHTML работает правильно, если на вашей странице встроен JavaScript, а не внешне.

XHTML требует, чтобы ваша страница строго соответствовала требованиям разметки XML. Поскольку JavaScript может содержать символы со специальным значением, вы должны обернуть его в CDATA, чтобы убедиться, что проверка не означает, что он неверен.

С HTML-страницами в Интернете вы можете просто добавить требуемый JavaScript между тегами. Когда вы проверяете HTML на своей веб-странице, содержимое JavaScript считается CDATA (символьные данные), которое поэтому игнорируется валидатором. То же самое не верно, если вы следуете более поздним стандартам XHTML при настройке своей веб-страницы. С XHTML код между тегами script считается PCDATA (анализируемые символьные данные), который поэтому обрабатывается валидатором.

     

Из-за этого вы не можете просто включать JavaScript между тегами script на своей странице, не разбивая свою веб-страницу (по крайней мере, насколько это касается валидатора).

Вы можете узнать подробнее о CDATA здесь и подробнее о XHTML здесь.

+16
01 мар. '10 в 19:20
источник

Не используйте CDATA в HTML4, но вы должны использовать CDATA в XHTML и должны использовать CDATA в XML, если у вас есть unescaped символы типа < и > .

+16
15 сент. '08 в 20:56
источник

Когда вы собираетесь выполнять строгое соответствие XHTML, вам нужно, чтобы CDATA так меньше, и амперсанды не помечены как недопустимые символы.

+9
15 сент. '08 в 20:54
источник

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

Вот объяснение wikipedia

+9
01 мар. '10 в 19:19
источник

CDATA сообщает браузеру, чтобы он отображал текст как есть, а не отображал его как HTML.

+8
01 мар. '10 в 19:19
источник

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

+8
01 мар. '10 в 19:19
источник

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

+6
29 авг. '12 в 22:50
источник

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

Ссылки

+5
27 авг. '12 в 20:37
источник

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

Обратная совместимость. Должен любить это.

+2
01 мар. '10 в 19:19
источник
+2
15 сент. '08 в 20:53
источник

Посмотрите другие вопросы по меткам или Задайте вопрос