在脚本标记中何时需要CDATA部分?

在脚本标记中是否需要CDATA标记,如果是的话?

换句话说,何时何地是这样的:

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

更可取的是:

<script type="text/javascript">
...code...
</script>

如果需要将文档解析为XML(例如,当将XHTML页面解释为XML),并且希望能够写入文字i<10a && b而不是i&lt;10a &amp;&amp; b a &amp;&amp; b ,因为默认情况下,XHTML会将JavaScript代码解析为分析字符数据,而不是字符数据。 这不是存储在外部源文件中的脚本的问题,但对于XHTML中的任何内联JavaScript,您可能需要使用CDATA部分。

请注意,许多XHTML页面从来没有打算被解析为XML,在这种情况下,这不会是一个问题。

有关该主题的优秀评论,请参阅http://javascript.about.com/library/blxhtml.htm


当浏览器将标记视为XML时:

<script>
<![CDATA[
    ...code...
]]>
</script>

当浏览器将标记视为HTML时:

<script>
    ...code...
</script>

当浏览器将标记视为HTML并且希望验证您的XHTML 1.0标记(例如)时。

<script>
//<![CDATA[
    ...code...
//]]>
</script>

HTML

HTML解析器会将<script></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

在XML中,适用不同的规则。 请注意,如果XHMTL文档是以XML内容类型提供的,则非IE浏览器仅使用XML解析器。

对于XML解析器来说, script标记并不比其他标记更好。 特别是,脚本节点可能包含由“ < ”触发的非文本子节点。 而“ & ”号表示一个字符实体。

所以,在XHTML中,这是不可能的:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

要解决此问题,可以将整个脚本包装在CDATA部分中。 这告诉解析器:'在本节中, 不要将“ < ”和“ & ”作为控制字符 。' 为了防止JavaScript引擎解释“ <![CDATA[ ”和“ ]]> ”标记,可以将它们包装在注释中。

如果您的脚本不包含任何“ < ”或“ & ”,则无论如何您都不需要CDATA部分。

链接地址: http://www.djcxy.com/p/48175.html

上一篇: When is a CDATA section necessary within a script tag?

下一篇: Getting JSON in nested ajax calls