HTML-объекты внутри тега script не конвертированы?
<script type="text/javascript">
function test() {
alert('<span>blah<span>');
}
</script>
<a href="#" onclick="test();">First</a><br />
<a href="#" onclick="alert('<span>blah<span>');">Second</a><br />
Third: <span>blah<span>
Демо: http://jsfiddle.net/LPYTZ/
Почему первый результат отличается? Теги <script>
каким-то образом исключены из преобразования сущности?
Ответы
Ответ 1
В HTML, script и элементы стиля определенные в DTD как содержащие CDATA. Это означает, что сущности и теги игнорируются до тех пор, пока синтаксический анализатор не достигнет того, что выглядит как конечный тег.
XHTML отличается, а сущности и теги внутри этих элементов функционируют как обычные, но только при анализе XHTML. Вы можете явно помечать контент как CDATA с помощью <![CDATA[ … ]]>
.
Браузеры будут обрабатывать XHTML, который будет использоваться как text/html, используя HTML-правила, которые приводят к большому шару скверны, когда вы пытаетесь написать код, который является правильным в соответствии с обоими наборами правил.
Самый простой способ избежать проблем - сохранить скрипты во внешних файлах и использовать атрибут src
для их включения.
Ответ 2
Да, модель контента STYLE
и SCRIPT
является специальной:
Хотя элементы STYLE
и SCRIPT
используют CDATA для своей модели данных, для этих элементов CDATA должен обрабатываться по-разному с помощью пользовательских агентов. Разметка и объекты должны рассматриваться как необработанные и передаваться в приложение как есть. Первое вхождение символьной последовательности "</
" (разделитель открытого конца тега) рассматривается как завершение конца содержимого элемента. В действительных документах это будет конечным тегом для элемента.