HTML
Синтаксический анализатор HTML будет обрабатывать все между <script>
и </script>
как часть сценария. Некоторым реализациям даже не нужен правильный закрывающий тег; они останавливают интерпретацию сценария на " </
", что является правильным в соответствии со спецификациями .
Обновление В HTML5 и с текущими браузерами это уже не так.
Так, в HTML, это не возможно:
<script>
var x = '</script>';
alert(x)
</script>
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 не интерпретировал метки « <![CDATA[
» и « ]]>
», их можно заключить в комментарии.
Если ваш сценарий не содержит ни « <
», ни « &
», вам все равно не нужен CDATA
раздел.