我正在读这个question我有一个相关的问题:
这家伙here说:
它用在脚本标签中以避免解析 already #CDATA.
Question #1
如果脚本是already#CDATA :为什么它(在脚本标签下)仍然呈现为 CDATA ?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
Question #2
为什么它是评论? (//
)
XHTML 应该通过使用媒体类型作为 XML 提供服务application/xhtml+xml
。在 HTML5 中,标记是onlyXHTML(如果它与 XML 媒体类型一起提供)。当这样服务时,脚本元素的内容是not CDATA.
因此,为了让 XML 解析器将脚本内容视为 CDATA,可以将它们包装在<![CDATA[ ]]>
.
虽然历史上很少有人将标记用作application/xhtml+xml
,许多人已经验证了他们的页面,就好像它是 XHTML 一样。 XHTML 验证器同样期望脚本内容通常不是 CDATA,因此通常会拒绝嵌入在 JavaScript 中的标签和其他标记片段,除非它们使用<![CDATA[ ]]>
将其页面验证为 XHTML 后,他们将使用text/html
媒体类型到浏览器,这意味着浏览器将标记视为 HTML,而不是 XHTML。在本例中,使用了 HTML 解析器,does自动将脚本内容视为 CDATA,因此<![CDATA[
and ]]>
。成为 JavaScript 引擎运行的脚本的一部分。因此,为了对 JavaScript 引擎隐藏这些字符串,它们前面带有//
在同一行,这意味着 JavaScript 引擎认为这些行是注释。
最后,有些人提供与两者相同的标记application/xhtml+xml
and text/html
,根据 HTTP 请求消息中找到的信息进行切换。出于与上述相同的原因,为了使脚本内容在两种模式下都能正确处理,//<![CDATA[
and //]]>
模式是一种非常有效的技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)