Нужны ли когда-либо теги CDATA в тегах сценария и если да, то когда?
Другими словами, когда и где это:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
предпочтительнее для этого:
<script type="text/javascript">
...code...
</script>
javascript
html
xhtml
cdata
штифтик
источник
источник
Ответы:
Раздел CDATA необходим, если вам нужно, чтобы ваш документ анализировался как XML (например, когда страница XHTML интерпретируется как XML), и вы хотите иметь возможность писать литерал,
i<10
аa && b
неi<10
иa && b
, поскольку XHTML будет анализировать код JavaScript как проанализированные символьные данные в отличие от символьных данных по умолчанию. Это не проблема для скриптов, которые хранятся во внешних исходных файлах, но для любого встроенного JavaScript в XHTML вы, вероятно, захотите использовать раздел CDATA.Обратите внимание, что многие страницы XHTML никогда не предназначались для анализа в формате XML, и в этом случае это не будет проблемой.
Для хорошей рецензии на эту тему см. Https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm.
источник
&
и<
символы, вам не нужен раздел CDATA; это будет хорошо работать как в HTML, так и в XHTML. Вы можете легко достичь этого, поместив весь существенный код во внешние скрипты и просто используя встроенные скрипты, например, для. инициализировать переменные (экранирование&
/<
в\x26
/\x3C
в строковые литералы, если вам нужно).Когда браузеры обрабатывают разметку как XML:
Когда браузеры обрабатывают разметку как HTML:
Когда браузеры обрабатывают разметку как HTML и вы хотите, чтобы ваша разметка XHTML 1.0 (например) проверялась.
источник
/* ... */
потому что в противном случае, если разрывы строк будут удалены, код будетHTML
Синтаксический анализатор HTML будет обрабатывать все между
<script>
и</script>
как часть сценария.Некоторым реализациям даже не нужен правильный закрывающий тег; они останавливают интерпретацию сценария на ".</
", что является правильным в соответствии со спецификациямиТак, в HTML, это не возможно:
CDATA
Секция не имеет никакого эффекта вообще . Вот почему вам нужно написатьили похожие.
Это также относится к файлам XHTML, которые используются в качестве
text/html
. (Поскольку IE не поддерживает типы контента XML, это в основном верно.)XML
В XML применяются другие правила. Обратите внимание, что браузеры (не IE) используют синтаксический анализатор XML, только если документ XHMTL обслуживается с типом содержимого XML.
Для синтаксического анализатора XML
script
тег не лучше, чем любой другой тег. В частности, узел сценария может содержать нетекстовые дочерние узлы, запускаемые знаком "<
"; и знак «&
» обозначает символьную сущность.Таким образом, в XHTML, это не возможно:
Чтобы обойти это, вы можете поместить весь сценарий в
CDATA
раздел. Это говорит синтаксическому анализатору: «В этом разделе не рассматривайте«<
»и«&
«как управляющие символы» . Чтобы механизм JavaScript не интерпретировал метки «<![CDATA[
» и «]]>
», их можно заключить в комментарии.Если ваш сценарий не содержит ни «
<
», ни «&
», вам все равно не нуженCDATA
раздел.источник
</
внутри скрипта теги это плохо.<script>var b = "<b>bold</b>";</script>
не удается проверить, но после прочтения вашего ответа и изменения на<script>var b = "<b>bold<\/b>";</script>
исправленный.По сути, это позволяет написать документ, который является одновременно XHTML и HTML. Проблема в том, что в XHTML синтаксический анализатор XML будет интерпретировать символы &, <,> в теге script и вызывать ошибку синтаксического анализа XML. Таким образом, вы можете написать свой JavaScript с сущностями, например:
Но это нецелесообразно. Большая проблема в том, что если вы читаете страницу в 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 не являются и, следовательно, не должны анализироваться таким образом.источник
Как не использовать CDATA в HTML4 , но вы должны использовать CDATA в XHTML и должны использовать CDATA в XML , если у вас есть неэкранированные символы , такие как <и>.
источник
Это гарантирует, что проверка XHTML работает правильно, когда у вас есть JavaScript, встроенный в вашу страницу, а не внешние ссылки.
XHTML требует, чтобы ваша страница строго соответствовала требованиям разметки XML. Поскольку JavaScript может содержать символы со специальным значением, вы должны обернуть его в CDATA, чтобы проверка не помечала его как искаженный.
Вы можете узнать больше о CDATA здесь и больше о XHTML здесь .
источник
CDATA указывает, что содержимое внутри не является XML.
Вот объяснение в Википедии
источник
Когда вы собираетесь строго соблюдать XHTML, вам нужны CDATA, поэтому меньше чем и амперсанды не помечаются как недопустимые символы.
источник
чтобы избежать ошибок XML во время проверки XML.
источник
CDATA говорит браузеру отображать текст как есть, а не отображать его как HTML.
источник
CDATA указывает, что содержимое внутри не является XML.
источник
CDATA необходим в любом диалекте XML, потому что текст в узле XML обрабатывается как дочерний элемент, прежде чем будет оцениваться как JavaScript. Это также причина, по которой JSLint жалуется на
<
персонажа в регулярных выражениях.Ссылки
источник
Когда вы хотите его проверить (в XML / XHTML - спасибо, Лорен Сегал ).
источник
Таким образом, старый браузер не анализирует код Javascript, и страница не разрывается.
Обратная совместимость. Должен любить это.
источник