具有 JavaScript 的 XHTML 中的奇怪 CDATA 行为

Strange CDATA behavior in XHTML with JavaScript

我正在使用 Blogger,我想从头开始制作我自己的模板,所以我开始了解事物的基本结构。 在我的旅程中,我遇到了 CDATA 的东西 我想测试这段代码。

<html>
  <head>
    <b:skin>
      <![CDATA[ ]]>
    </b:skin>
  </head>
  <body>
    <b:section id='post'/>
    <script>
      if(true&&true)
        alert("hello");
    </script>
  </body>
</html>

它给我一个错误,我知道“&”应该是“&”,因为它是 xhtml,所以我添加了 cdata,我的代码将变成这样

<html>
  <head>
    <b:skin>
      <![CDATA[ ]]>
    </b:skin>
  </head>
  <body>
    <b:section id='post'/>
    <script>
      <![CDATA[
      if(true&&true)
        alert("hello");
      ]]>
    </script>
  </body>
</html>

现在我测试了它,警告消息不会显示,所以我在打开和关闭 CDATA 标记之前放置 // 并且它起作用了。 我想了解为什么它与 // 而不是没有一起工作的原因。

Blogger 将 XML 模板解析为 XML,因此它们需要有效 XML 才能与 Blogger 的后端一起使用。

但是,当 Blogger 将生成的页面提供给浏览器时,它说 Content-Type 是 text/html; charset=UTF-8(这是错误的,因为它是 XHTML(但见下文))。

HTML 和 XHTML 是不同的语言,所以当浏览器将 XHTML 解析为 HTML 时,它不会对 [=11= 做任何特殊的事情] 并将其传递给 JavaScript 引擎。

<![CDATA[ 无效 JavaScript,因此抛出异常。

通过添加前缀 //,您可以将无效的 JavaScript 更改为有效的 JavaScript 行注释。


旁白:XHTML 和 HTML 非常相似,你可以假装你的 XHTML 是 HTML 如果你 follow the compatibility guidelines.