XHTML应该通过使用媒体类型application/xhtml+xml
作为XML提供。在HTML5中,标记仅为 XHTML(如果使用XML媒体类型)。当像这样服务时,脚本元素的内容是而不是 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[
和//]]>
模式是非常有效的技术。
它被注释掉,否则你会得到一个JS语法错误。我目前没有看到CDATA在HTML脚本标记中被大量使用,并且不会自己使用它。也许是从XHTML的日子开始的,因为CDATA是一个XML构造,而XHTML使用了许多XML的规则。 – Netricity 2013-05-05 08:15:26