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

Только Opera полностью поддерживает page-break-inside.

Ссылки:

Общие сведения

Хром специфический

Специфичные для Firefox

878
задан Shog9 22 November 2009 в 19:25
поделиться

13 ответов

Раздел CDATA требуется при необходимости в документе для парсинга как XML (например, когда страница XHTML интерпретируется как XML) , и Вы хотите быть в состоянии записать литерал i<10 и a && b вместо i&lt;10 и a &amp;&amp; b , поскольку XHTML проанализирует код JavaScript как проанализированные символьные данные в противоположность символьным данным по умолчанию. Это не проблема со сценариями, которые хранятся во внешних исходных файлах, но для любого встроенного JavaScript в XHTML Вы будете , вероятно , хотят использовать раздел CDATA.

Примечание, что много страниц XHTML никогда не предназначались, чтобы быть проанализированными как XML, в этом случае, это не будет проблемой.

Для хорошей рецензии на предмете, см. https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

570
ответ дан Cody Gray 22 November 2009 в 19:25
поделиться

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

9
ответ дан Chris Shaffer 22 November 2009 в 19:25
поделиться
2
ответ дан Community 22 November 2009 в 19:25
поделиться

Сделайте не использование CDATA в HTML4, но Вы должны использование, CDATA в XHTML и должен использование CDATA в XML, если у Вас есть незавершенные символы как < и>.

18
ответ дан Loren Segal 22 November 2009 в 19:25
поделиться

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

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

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

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

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

<script>
//<![CDATA[
    ...code...
//]]>
</script>
231
ответ дан Shadow2531 22 November 2009 в 19:25
поделиться

HTML

Анализатор HTML будет обрабатывать все, что находится между , как часть сценария. Некоторым реализациям даже не нужен правильный закрывающий тег; они останавливают интерпретацию сценария в « », что является правильным в соответствии со спецификациями .

Обновление В 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 не лучше любого другого тега. В частности, узел сценария может содержать нетекстовые дочерние узлы, запускаемые " <"; а знак « & » обозначает сущность символа.

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

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

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

122
ответ дан 22 November 2019 в 21:06
поделиться

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

Обратная совместимость. Это должно понравиться.

2
ответ дан 22 November 2019 в 21:06
поделиться

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

8
ответ дан 22 November 2019 в 21:06
поделиться

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

8
ответ дан 22 November 2019 в 21:06
поделиться

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

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

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

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

Вы можете узнать больше о CDATA здесь , а больше о XHTML здесь .

17
ответ дан 22 November 2019 в 21:06
поделиться

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

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

23
ответ дан 22 November 2019 в 21:06
поделиться

По сути, это позволяет писать документ, который является одновременно 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.

30
ответ дан 22 November 2019 в 21:06
поделиться

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

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

10
ответ дан 22 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

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