【问题标题】:How to declare JavaScript and CSS XHTML-compatible?如何声明 JavaScript 和 CSS XHTML 兼容?
【发布时间】:2023-12-29 19:19:01
【问题描述】:

我想知道如何在 CDATA 部分中声明 JavaScript 代码以使其与 XHTML 兼容。哪种方法正确/推荐?

方法一:

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

方法二:

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

第二个也适合内联CSS吗?

而且,在这里添加一些编码声明是否可能/有意义吗

<script type="text/javascript" charset="utf-8">
...
<style type="text/css" media="screen" charset="utf-8">
...

or

<script type="text/javascript">
@charset "utf-8";
...
<style type="text/css" media="screen">
@charset "utf-8";
...

【问题讨论】:

  • *上的这些 XHTML examples 演示了如何将内联 JavaScript 合并到 CDATA 部分中。

标签: javascript css xhtml


【解决方案1】:

哪种方法正确/推荐?

两者都一样好。

第二个也适合内联CSS吗?

是的。

但是,当您想在块中包含字符 &lt;&amp; 时,您只需要担心将脚本和样式块放在 &lt;![CDATA[ 部分中。你几乎不会在 CSS 中使用它们。

您可以在 JavaScript 中使用它们,但通常最好通过将大量代码放在它所属的外部脚本中来避免该问题。内联脚本块往往更适合放入数据和脚本调用调用,很少需要使用 &lt;&amp; (字符串文字值除外,在这种情况下,有一个参数可以将它们编码为例如。@987654326 @ 代替)。

而且,在这里添加一些编码声明是否可能/有意义

没有。 charset="..." 属性仅对外部文件有任何意义(并且在 &lt;style&gt; 上不存在,因为它永远不是外部文件)。内部内容已经与包含文档的其余部分同时从字节解码为字符,因此charset 在这一点上毫无意义。

无论如何,并非所有浏览器都关注&lt;script charset&gt; 属性,因此您必须使脚本的编码与包含它们的页面的编码相匹配。这使得charset="..." 变得非常多余。

@charset "utf-8"; 在外部样式表中是可以的,但在样式表中几乎不需要非 ASCII 字符,所以很少看到它。 @charset 在 JavaScript 中无效。

【讨论】:

  • bobince,感谢您的详细回答!所以,我想我会把它留给&lt;script src="foo.js" type="text/javascript" charset="utf-8"&gt; 用于外部脚本(虽然“相当多余”)并将@charset "utf-8"; 添加到我的外部样式表中。
  • 顺便说一句:如果 XHTML 被用作 text/html(我认为为了跨浏览器兼容性,这是强制性的),您是否建议使用 CDATA 部分?
【解决方案2】:

这取决于您服务 XHTML 的方式。

如果您将 XHTML 作为 XHTML 提供,请使用以下 HTTP 标头...

Content-Type:application/xhtml+xml

...那么您只需要一个 CDATA 部分,其中开头和结尾已注释掉;和你一样。

但是,如果您作为 HTML...

Content-Type:text/html

事情变得有点复杂。您应该阅读文章Sending XHTML as text/html Considered Harmful,但也要对此事形成自己的看法;以text/html 提供XHTML 是否真的有害,这一点经常被争论。例如,Elliote Rusty Harold(我强烈推荐这本书的作者Refactoring HTML)不同意。

【讨论】:

  • 我想我不得不使用 Content-Type:text/html 将 XHTML 作为 HTML 提供服务,因为像 IE 5/5.5/6 这样的旧浏览器根本不支持 X(HT)ML,对吧?那么,是否仍然需要/推荐使用 CDATA 部分?
  • 是的,任何版本的 IE 在您使用 application/xhtml+xml 时都会表现不佳。因此,理论上你会反对正式的推荐,如果你想尽可能接近理想,你会想要使用 Ian Hickson 描述的技术。
【解决方案3】:

我习惯用这个,从不麻烦:

<script type="text/javascript" charset="utf-8">
...
</script
<style type="text/css" media="screen" charset="utf-8">
...
</style>

【讨论】:

  • 不过,这不符合 XHTML。您的字符可能不符合 XML 要求,这就是为什么您需要在其周围包含 &lt;![CDATA[ ... ]]&gt;