</script>
должен быть разбит, потому что в противном случае он завершит закрывающий блок <script></script>
слишком рано. На самом деле его следует разделить между <
и /
, поскольку предполагается, что блок сценария (в соответствии с SGML) заканчивается на любой последовательностью открытия конечного тега (ETAGO) (т.е. </
)
Хотя элементы STYLE и SCRIPT используют CDATA для своей модели данных, для этих элементов пользовательские агенты должны обрабатывать CDATA по-разному. Разметка и сущности должны рассматриваться как необработанный текст и передаваться приложению как есть. Первое вхождение последовательности символов "</
" (открытый разделитель конечных тегов) обрабатывается как завершение конца содержимого элемента. В действительных документах это будет конечный тег для элемента.
Однако на практике браузеры заканчивают парсинг блока скрипта CDATA только с действительным </script>
закрывающим тегом.
В XHTML такой специальной обработки для блоков сценариев нет, поэтому любой символ <
(или &
) внутри них должен быть &escaped;
, как и в любом другом элементе. Однако, тогда браузеры, которые анализируют XHTML как HTML старой школы, запутаются. Существуют обходные пути, включающие блоки CDATA, но проще всего просто избегать использования этих символов без экранирования. Лучший способ написания элемента сценария из сценария, который работает с любым типом синтаксического анализатора:
<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="foo.js">\x3C/script>');
</script>