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

时间:2020-03-05 18:54:30  来源:igfitidea点击:

脚本标记中是否曾经需要CDATA标记?如果需要,何时?

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

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

对此更可取:

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

解决方案

回答

当我们希望它进行验证时(感谢XML / XHTML,Loren Segal)。

回答

当我们要严格遵守XHTML时,我们需要CDATA以便小于和不将&标记为无效字符。

回答

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

请注意,绝不会将许多XHTML页面解析为XML,在这种情况下,这不会成为问题。

有关此主题的文章,请访问http://javascript.about.com/library/blxhtml.htm

回答

不要在HTML4中使用CDATA,但是如果我们有未转义的符号(例如<和>),则应该在XHTML中使用CDATA,并且必须在XML中使用CDATA。

回答

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

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

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

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

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

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

回答

的HTML

HTML解析器将把<< script></ script>之间的所有内容视为脚本的一部分。有些实现甚至不需要正确的结束标记。他们会在"</`"处停止脚本解释,根据规范,这是正确的。

Update In HTML5, and with current browsers, that is not the case anymore.

因此,在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"标签并不比其他任何标签都要好。特别地,脚本节点可以包含非文本子节点,由"&lt;"触发; "&`"符号表示字符实体。

因此,在XHTML中,这是不可能的:

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

要解决此问题,我们可以将整个脚本包装在CDATA节中。这告诉解析器:"在本节中,请勿将"&lt;"和""视为控制字符。为了防止JavaScript引擎解释"!!"(CDATA []和"]]>")标记,可以将它们包装在注释中。

如果脚本不包含任何"&lt;"或者"",则无论如何都不需要CDATA部分。

回答

以避免在xhtml验证期间出现xml错误。

回答

这样,较旧的浏览器就不会解析Javascript代码,并且页面也不会中断。

向后兼容。要爱它。

回答

CDATA告诉浏览器按原样显示文本,而不是将其呈现为HTML。

回答

这是X(HT)ML的东西。当我们在JavaScript中使用诸如<<和`>之类的符号时,例如为了比较两个整数,必须像XML一样对其进行解析,因此它们将被标记为标签的开头或者结尾。

CDATA表示以下各行(直到[]]>为止的所有行都不是XML,因此不应以这种方式进行解析。

回答

CDATA指示其中的内容不是XML。

这是维基百科上的解释

回答

它可以确保当页面中而不是外部引用中嵌入JavaScript时,XHTML验证可以正常工作。

XHTML要求页面严格遵守XML标记要求。由于JavaScript可能包含具有特殊含义的字符,因此必须将其包装在CDATA中,以确保验证不会将其标记为格式错误。

With HTML pages on the web you can just include the required JavaScript between  and  tags. When you validate the HTML on your web page the JavaScript content is considered to be CDATA (character data) that is therefore ignored by the validator. The same is not true if you follow the more recent XHTML standards in setting up your web page. With XHTML the code between the script tags is considered to be PCDATA (parsed character data) which is therefore processed by the validator.
    
    Because of this, you can't just include JavaScript between the script tags on your page without 'breaking' your web page (at least as far as the validator is concerned).

我们可以在此处了解有关CDATA的更多信息,并在此处了解有关XHTML的更多信息。

回答

基本上是允许编写XHTML和HTML的文档。问题是在XHTML中,XML解析器将解释script标记中的&,<,>字符并导致XML解析错误。因此,我们可以使用实体编写JavaScript,例如:

if (a &gt; b) alert('hello world');

但这是不切实际的。更大的问题是,如果我们以HTML格式阅读页面,则标记脚本将被视为"默认情况下"为CDATA,并且此类JavaScript无法运行。因此,如果我们希望使用XHTML和HTML解析器都可以使同一页面正常运行,则需要将脚本标签包含在XHTML中的CDATA元素中,而不是将其包含在HTML中。

这个技巧将CDATA元素的开始标记为JavaScript注释;在HTML中,JavaScript解析器将忽略CDATA标记(这是注释)。在XHTML中,XML解析器(在JavaScript之前运行)检测到该解析器并将其余部分(直到CDATA结束)视为CDATA。