我正在阅读此question,我有一个相关的问题:
这个人here说:
它用于脚本标记以避免解析<和&amp ;.在HTML中,这是 不需要,因为在HTML中,脚本已经 #CDATA。
问题#1
如果SCRIPT 已经 #CDATA:为什么它仍然作为CDATA渲染(在脚本标记下)?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
问题#2
为什么要作为评论? (//
)
答案 0 :(得分:8)
XHTML应该使用媒体类型application/xhtml+xml
作为XML提供。在HTML5中,如果标记是使用XML媒体类型提供的,则标记仅为 XHTML。如果这样提供,脚本元素的内容是不 CDATA。
因此,为了让XML解析器将脚本内容视为CDATA,可以将它们包装在<![CDATA[ ]]>
中。
虽然历史上很少有人将标记服务为application/xhtml+xml
,但很多人已将其网页验证为XHTML。 XHTML验证器同样期望脚本内容通常不是CDATA,因此通常会拒绝嵌入在JavaScript中的标记和其他标记碎片,除非它们使用<![CDATA[ ]]>
进行转义
将页面验证为XHTML后,他们会向浏览器提供text/html
媒体类型的页面,这意味着浏览器会将标记视为HTML,而不是XHTML。在这种情况下,使用HTML解析器, 自动将脚本内容视为CDATA,因此<![CDATA[
和]]>
。成为JavaScript引擎运行的脚本的一部分。因此,要从JavaScript引擎隐藏这些字符串,它们在同一行上以//
开头,这意味着JavaScript引擎认为这些行是注释。
最后,有些人提供与application/xhtml+xml
和text/html
相同的标记,根据HTTP请求消息中的信息进行切换。出于与上述相同的原因,为了在两种模式下正确处理脚本内容,//<![CDATA[
和//]]>
模式是一种非常有效的技术。