4

我正在阅读这个问题,我有一个相关的问题:

这里的这个人说:

它用于脚本标签中以避免解析 < 和 &。在 HTML 中,这不是必需的,因为在 HTML 中,脚本已经是#CDATA。

Question #1

如果 SCRIPT已经是#CDATA :为什么它(在脚本标签下)仍然呈现为 CDATA ?

<script type="text/javascript"> 
// <![CDATA[

// ]]>
</script> 

Question #2

为什么它是评论?( //)

4

1 回答 1

8

XHTML 应该通过使用媒体类型作为 XML 来提供application/xhtml+xml。在 HTML5 中,标记只有在使用 XML 媒体类型提供时才为 XHTML。像这样提供服务时,脚本元素的内容不是CDATA。

因此,要让 XML 解析器将脚本内容视为 CDATA,可以将它们包装在<![CDATA[ ]]>.

虽然历史上很少有人将标记作为application/xhtml+xml.,但许多人已经将他们的页面验证为 XHTML。XHTML 验证器同样期望脚本内容不是通常的 CDATA,因此通常会拒绝嵌入在 JavaScript 中的标记和其他标记碎片,除非它们被转义<![CDATA[ ]]>

在将他们的页面验证为 XHTML 之后,他们会text/html向浏览器提供具有媒体类型的页面,这意味着浏览器将标记视为 HTML,而不是 XHTML。在这种情况下,使用了 HTML 解析器,它自动将脚本内容视为 CDATA,因此<![CDATA[and ]]>. 成为 JavaScript 引擎运行的脚本的一部分。因此,为了对 JavaScript 引擎隐藏这些字符串,它们会在//同一行前面加上,这意味着 JavaScript 引擎认为这些行是注释。

application/xhtml+xml最后,有些人提供与和相同的标记text/html,根据 HTTP 请求消息中的信息进行切换。出于与上述相同的原因,要使脚本内容在两种模式下都得到正确处理, //<![CDATA[and//]]>模式是一种非常有效的技术。

于 2013-05-05T10:03:04.120 回答