如何声明JavaScript和CSS XHTML兼容?

时间:2010-05-21 17:01:26

标签: javascript css xhtml

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

方法1:

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

方法2:

<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";
...

3 个答案:

答案 0 :(得分:6)

  

哪种方法正确/推荐?

两者都同样好。

  

第二个是否也适用于内联CSS?

但是,如果要在块中包含字符<![CDATA[<,则只需担心将脚本和样式块放在&部分中。你几乎不会在CSS中使用它们。

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

  

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

没有。 charset="..."属性对外部文件只有任何意义(<style>上不存在,因为它永远不是外部文件)。内部内容已经从包含文档的其余部分同时从字节解码为字符,因此此时charset毫无意义。

在任何情况下,并非所有浏览器都会关注<script charset>属性,因此您必须使脚本的编码与包含它们的页面的编码相匹配。这使得charset="..."非常多余。

外部样式表中的

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

答案 1 :(得分:1)

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

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

Content-Type:application/xhtml+xml

...然后您需要的是一个CDATA部分,其开头和结尾已被注释掉;就像你一样。

但是,如果您正在使用HTML ...

Content-Type:text/html

事情变得复杂一些。你应该阅读Sending XHTML as text/html Considered Harmful这篇文章,但也要对这个问题形成自己的看法;服务XHTML作为text/html是否真的有害是经常辩论;例如,Elliote Rusty Harold(我强烈推荐的书Refactoring HTML的作者)不同意。

答案 2 :(得分:-2)

我习惯使用它并且永远不会遇到麻烦:

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