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//]]>
模式是一种非常有效的技术。