CDATA标记在脚本标记中是否必要,如果必要,在什么情况下需要使用?
换句话说,什么时候以及在哪里需要这样做:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
更好的选择是:
<script type="text/javascript">
...code...
</script>
CDATA标记在脚本标记中是否必要,如果必要,在什么情况下需要使用?
换句话说,什么时候以及在哪里需要这样做:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
更好的选择是:
<script type="text/javascript">
...code...
</script>
i<10
和a && b
而不是i<10
和a && b
,则需要使用CDATA部分。因为XHTML会默认将JavaScript代码解析为已解析字符数据而不是字符数据。对于存储在外部源文件中的脚本没有问题,但对于任何内联XHTML中的JavaScript,您可能需要使用CDATA部分。&
和<
字符,就不需要使用CDATA段落;它可以在HTML和XHTML中正常工作。您可以通过将所有重要的代码放入外部脚本,并仅使用内联脚本来初始化变量(如果需要,在字符串文字中转义&
/<
为\x26
/\x3C
)来轻松实现这一点。 - bobince当浏览器将标记视为XML时:
<script>
<![CDATA[
...code...
]]>
</script>
当浏览器将标记视为HTML时: When browsers treat the markup as HTML:
<script>
...code...
</script>
当浏览器将标记视为HTML并且您希望您的XHTML 1.0标记(例如)得到验证时。<script>
//<![CDATA[
...code...
//]]>
</script>
/* ... */
包围你的 CDATA 部分,否则如果移除换行符,代码将会出错。 - BryanH在HTML中,一旦遇到<script>
标签,解析器会将其与</script>
之间的所有内容都视为脚本的一部分。有些实现甚至不需要正确的闭合标签;它们会在"</
"处停止脚本解释,这符合规范。
更新: 在HTML5和当前的浏览器中,情况已经不再如此了。
所以,在HTML中,以下操作是不可能的:
<script>
var x = '</script>';
alert(x)
</script>
CDATA
部分完全没有影响。这就是为什么你需要编写:
var x = '<' + '/script>'; // or
var x = '<\/script>';
或类似的。
这同样适用于以text/html
形式提供的XHTML文件。(由于IE不支持XML内容类型,因此这基本成立。)
在XML中,应用不同的规则。请注意,(非IE)浏览器仅在XML内容类型下服务的XHTML文档中使用XML解析器。
对于XML解析器而言,script
标记并不比其他标记更好。特别地,脚本节点可能包含由"<
"触发的非文本子节点,并且"&
"符号表示一个字符实体。
因此,在XHTML中,这是不可行的:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
为了解决这个问题,您可以将整个脚本包装在一个 CDATA
区块中。这会告诉解析器:“在这个区块中不要将“<
”和“&
”视为控制字符”。为了防止 JavaScript 引擎解释 "<![CDATA[
" 和 "]]>
" 标记,您可以将它们包装在注释中。
如果您的脚本不包含任何 "<
" 或 "&
",则不需要 CDATA
区块。
</
都是不好的。 - Salman A<script>var b = "<b>bold</b>";</script>
无法通过验证,但是在阅读了您的答案并更改为 <script>var b = "<b>bold<\/b>";</script>
后,问题得到了解决。 - Salman A基本上是允许编写既是XHTML又是HTML的文档。问题在于,在XHTML内部,XML解析器将解释脚本标记中的&、<、>字符并导致XML解析错误。因此,您可以使用实体编写JavaScript,例如:
if (a > b) alert('hello world');
但这种方法并不实用。更大的问题是,如果您在HTML中阅读页面,标签 script 默认被视为CDATA,并且这样的JavaScript将无法运行。因此,如果您希望同一页面在使用XHTML和HTML解析器时都正常工作,您需要在XHTML中将 script 标签包含在CDATA元素中,但不要在HTML中这样做。
这个技巧将CDATA元素的开始标记标记为JavaScript注释;在HTML中,JavaScript解析器会忽略CDATA标记(它是一个注释)。在XHTML中,XML解析器(在JavaScript之前运行)会检测到它,并将其余部分视为CDATA直到CDATA结束。
这是一个与XML相关的技术。当您在JavaScript中使用像<
和>
这样的符号来比较两个整数时,这需要像解析XML一样进行解析,因此它们会被标记为开始或结束标记。
CDATA表示以下行(直到]]>
之前的所有内容)不是XML,因此不应该以那种方式进行解析。
在HTML4中不要使用CDATA,但在XHTML中应该使用CDATA,在XML中如果有未转义的符号像<和>则必须使用CDATA。
在页面中嵌入JavaScript而非外部引用时,需要确保XHTML验证工作正常。
XHTML要求您的页面严格符合XML标记要求。由于JavaScript可能包含具有特殊含义的字符,因此必须将其包装在CDATA中,以确保验证不会将其标记为格式错误。
在Web上使用HTML页面时,您只需在标签之间包含所需的JavaScript。当您验证网页的HTML时,JavaScript内容被视为是CDATA(字符数据),因此被验证器忽略。如果您遵循更近期的XHTML标准设置Web页面,则情况并非如此。在XHTML中,脚本标记之间的代码被视为是PCDATA(解析字符数据),因此将被验证器处理。
因此,您不能仅仅在页面的脚本标记之间包含JavaScript,否则会“破坏”您的网页(至少在验证器的眼里是这样)。
您可以在此处了解更多关于CDATA的信息,以及了解更多关于XHTML的信息。