Соответствующий вопрос Когда раздел CDATA необходим в теге сценария? объясняет, что раздел CDATA рекомендуется при встраивании сценариев в документы XHTML. Однако просто установить тип документа XHTML в тестовом документе недостаточно. CDATA все еще обрабатывается как синтаксическая ошибка.
Согласно этой записи в блоге , это связано с тем, что тип контента должен соответствовать определению типа документа. Правильный XHTML должен иметь следующий набор заголовков Content-type
:
Content-type: application/xhtml+xml
, если это не указано и вместо этого отправлено text/html
, браузеры вернутся в HTML. И действительно, если я добавлю этот заголовок в свой тестовый пример, браузеры начнут правильно анализировать JavaScript внутри CDATA, даже если он не закомментирован.
Это работает для меня (настройка заголовка с помощью PHP):
<?php header("Content-type: application/xhtml+xml");
echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script><![CDATA[alert('Hey!');]]></script>
</head>
<body>
</body>
</html>