脚本标签内的HTML实体未转换?

And*_*eKR 18 javascript xml

<script type="text/javascript">
    function test()    {
        alert('&lt;span&gt;blah&lt;span&gt;');
    }
</script>
<a href="#" onclick="test();">First</a><br />
<a href="#" onclick="alert('&lt;span&gt;blah&lt;span&gt;');">Second</a><br />
Third: &lt;span&gt;blah&lt;span&gt;
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/LPYTZ/

为什么第一个结果不同?<script>标签是否以某种方式从实体转换中排除?

Que*_*tin 24

在HTML中,脚本和样式元素在DTD定义为包含CDATA.这意味着在解析器遇到类似于结束标记的内容之前,将忽略实体和标记.

XHTML是不同的,这些元素中的实体和标签正常运行 - 但仅在解析为XHTML时.您可以使用以下内容将内容明确标记为CDATA <![CDATA[ … ]]>.

浏览器将使用HTML规则将XHTML视为text/html,当您尝试编写在两组规则下都正确的代码时,这会导致一个令人讨厌的大球.

避免问题的最简单方法是将脚本保存在外部文件中,并使用该src属性来包含它们.


Gum*_*mbo 12

是的,内容模型STYLESCRIPT特殊:

虽然STYLESCRIPT元素使用CDATA作为其数据模型,但对于这些元素,CDATA必须由用户代理以不同方式处理.必须将标记和实体视为原始文本并按原样传递给应用程序.第一次出现的字符序列" </"(结束标记打开定界符)被视为终止元素内容的结尾.在有效文档中,这将是元素的结束标记.