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
.