在脚本标签中是否有必要使用CDATA标签,如果是这样的话?
换句话说,何时何地:
<script type="text/javascript"> //<![CDATA[ ...code... //]]> </script>
比这更好:
<script type="text/javascript"> ...code... </script>
这样旧的浏览器不会解析Javascript代码,并且页面不会中断 .
向后兼容性 . 一定要喜欢它 .
在xhtml验证期间避免xml错误 .
CDATA告诉浏览器按原样显示文本,而不是将其呈现为HTML .
CDATA表示其中的内容不是XML .
CDATA在任何XML方言中都是必需的,因为XML节点中的文本在被评估为JavaScript之前被视为子元素 . 这也是JSLint complains关于正则表达式中 < 字符的原因 .
<
References
Creating a declarative XML UI language
The Future of the Web: Rich Clients, Rich Browsers, Rich Portals
When you want it to validate(在XML / XHTML中 - 谢谢,Loren Segal) .
如果您需要将文档解析为XML(例如,当XHTML页面被解释为XML)并且您希望能够编写文字 i<10 和 a && b 而不是 i<10 和 a && b 时,则需要CDATA部分,因为XHTML将解析JavaScript代码作为解析的字符数据,默认情况下与字符数据相对 . 对于存储在外部源文件中的脚本,这不是问题,但对于XHTML中的任何内联JavaScript,您可能希望使用CDATA部分 .
i<10
a && b
i<10
a && b
请注意,许多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解析器将处理 <script> 和 </script> 之间的所有内容作为脚本的一部分 . 有些实现甚至不需要正确的结束标记;他们停止脚本解释为“</”,根据规格是正确的 .
<script>
</script>
更新在HTML5和当前浏览器中,情况不再如此 .
因此,在HTML中,这是不可能的:
<script> var x = '</script>'; alert(x) </script>
CDATA 部分有 no effect at all . 这就是你需要写作的原因
CDATA
var x = '<' + '/script>'; // or var x = '<\/script>';
或类似的 .
这也适用于作为 text/html 的XHTML文件 . (由于IE不支持XML内容类型,因此大多数情况都是如此 . )
text/html
在XML中,适用不同的规则 . 请注意,如果XHMTL文档以XML内容类型提供,则(非IE)浏览器仅使用XML解析器 .
对于XML解析器, script 标记并不比任何其他标记更好 . 特别地,脚本节点可以包含非文本子节点,由“ < "; and a " & ”触发,符号表示字符实体 .
script
&
所以,在XHTML中,这是不可能的:
<script> if (a<b && c<d) { alert('Hooray'); } </script>
要解决此问题,您可以将整个脚本包装在 CDATA 部分中 . 这告诉解析器:'在本节中, don't treat "<" and "&" as control characters . '要阻止JavaScript引擎解释“ <![CDATA[ " and " ]]> ”标记,您可以将它们包装在注释中 .
<![CDATA[
]]>
如果您的脚本不包含任何“ < " or " & ”,则无论如何都不需要 CDATA 部分 .
基本上它是允许编写既是XHTML又是HTML的文档 . 问题是在XHTML中,XML解析器将解释脚本标记中的&,<,>字符并导致XML解析错误 . 因此,您可以使用实体编写JavaScript,例如:
if (a > b) alert('hello world');
但这是不切实际的 . 更大的问题是,如果您在HTML中读取页面,标记脚本将被视为CDATA 'by default',并且此类JavaScript将无法运行 . 因此,如果您希望同一页面都可以使用XHTML和HTML解析器,则需要将脚本标记包含在XHTML中的CDATA元素中,但不要将其包含在HTML中 .
这个技巧标志着CDATA元素作为JavaScript注释的开始;在HTML中,JavaScript解析器忽略CDATA标记(它是注释) . 在XHTML中,XML解析器(在JavaScript之前运行)检测到它并将其余部分视为CDATA结束为CDATA .
这是一个X(HT)ML的事情 . 在JavaScript中使用 < 和 > 等符号时,例如为了比较两个整数,这必须像XML一样进行解析,因此它们将标记为标记的开头或结尾 .
>
CDATA意味着以下行( ]]> 的所有内容都不是XML,因此不应该这样解析 .
不要在HTML4中使用CDATA,但是你应该在XHTML中使用CDATA,如果你有像<和>这样的未转义符号,必须在XML中使用CDATA .
It to ensure that XHTML validation works correctly when you have JavaScript embedded in your page, rather than externally referenced.
XHTML要求您的页面严格符合XML标记要求 . 由于JavaScript可能包含具有特殊含义的字符,因此必须将其包装在CDATA中以确保验证不会将其标记为格式错误 .
使用网页上的HTML页面,您可以在标签之间包含所需的JavaScript . 在网页上验证HTML时,JavaScript内容被视为CDATA(字符数据),因此验证程序会忽略它 . 如果您在设置网页时遵循最新的XHTML标准,则情况并非如此 . 同XHTML脚本标记之间的代码被认为是PCDATA(解析的字符数据),因此由验证器处理 . 因此,您不能只在页面上的脚本标记之间包含JavaScript而不会“破坏”您的网页(至少就验证程序而言) .
你可以学习more about CDATA here和more about XHTML here .
当您要求严格的XHTML合规性时,您需要CDATA,并且&amprsands不会被标记为无效字符 .
这是对wikipedia的解释
15 回答
这样旧的浏览器不会解析Javascript代码,并且页面不会中断 .
向后兼容性 . 一定要喜欢它 .
在xhtml验证期间避免xml错误 .
CDATA告诉浏览器按原样显示文本,而不是将其呈现为HTML .
CDATA表示其中的内容不是XML .
CDATA在任何XML方言中都是必需的,因为XML节点中的文本在被评估为JavaScript之前被视为子元素 . 这也是JSLint complains关于正则表达式中
<
字符的原因 .References
Creating a declarative XML UI language
The Future of the Web: Rich Clients, Rich Browsers, Rich Portals
When you want it to validate(在XML / XHTML中 - 谢谢,Loren Segal) .
如果您需要将文档解析为XML(例如,当XHTML页面被解释为XML)并且您希望能够编写文字
i<10
和a && b
而不是i<10
和a && b
时,则需要CDATA部分,因为XHTML将解析JavaScript代码作为解析的字符数据,默认情况下与字符数据相对 . 对于存储在外部源文件中的脚本,这不是问题,但对于XHTML中的任何内联JavaScript,您可能希望使用CDATA部分 .请注意,许多XHTML页面从未打算被解析为XML,在这种情况下,这不会是一个问题 .
有关该主题的精彩文章,请参阅http://javascript.about.com/library/blxhtml.htm
当浏览器将标记视为XML时:
当浏览器将标记视为HTML时:
当浏览器将标记视为HTML并且您希望XHTML 1.0标记(例如)进行验证时 .
HTML
HTML解析器将处理
<script>
和</script>
之间的所有内容作为脚本的一部分 . 有些实现甚至不需要正确的结束标记;他们停止脚本解释为“</”,根据规格是正确的 .因此,在HTML中,这是不可能的:
CDATA
部分有 no effect at all . 这就是你需要写作的原因或类似的 .
这也适用于作为
text/html
的XHTML文件 . (由于IE不支持XML内容类型,因此大多数情况都是如此 . )XML
在XML中,适用不同的规则 . 请注意,如果XHMTL文档以XML内容类型提供,则(非IE)浏览器仅使用XML解析器 .
对于XML解析器,
script
标记并不比任何其他标记更好 . 特别地,脚本节点可以包含非文本子节点,由“<
"; and a "&
”触发,符号表示字符实体 .所以,在XHTML中,这是不可能的:
要解决此问题,您可以将整个脚本包装在
CDATA
部分中 . 这告诉解析器:'在本节中, don't treat "<" and "&" as control characters . '要阻止JavaScript引擎解释“<![CDATA[
" and "]]>
”标记,您可以将它们包装在注释中 .如果您的脚本不包含任何“
<
" or "&
”,则无论如何都不需要CDATA
部分 .基本上它是允许编写既是XHTML又是HTML的文档 . 问题是在XHTML中,XML解析器将解释脚本标记中的&,<,>字符并导致XML解析错误 . 因此,您可以使用实体编写JavaScript,例如:
但这是不切实际的 . 更大的问题是,如果您在HTML中读取页面,标记脚本将被视为CDATA 'by default',并且此类JavaScript将无法运行 . 因此,如果您希望同一页面都可以使用XHTML和HTML解析器,则需要将脚本标记包含在XHTML中的CDATA元素中,但不要将其包含在HTML中 .
这个技巧标志着CDATA元素作为JavaScript注释的开始;在HTML中,JavaScript解析器忽略CDATA标记(它是注释) . 在XHTML中,XML解析器(在JavaScript之前运行)检测到它并将其余部分视为CDATA结束为CDATA .
这是一个X(HT)ML的事情 . 在JavaScript中使用
<
和>
等符号时,例如为了比较两个整数,这必须像XML一样进行解析,因此它们将标记为标记的开头或结尾 .CDATA意味着以下行(
]]>
的所有内容都不是XML,因此不应该这样解析 .不要在HTML4中使用CDATA,但是你应该在XHTML中使用CDATA,如果你有像<和>这样的未转义符号,必须在XML中使用CDATA .
It to ensure that XHTML validation works correctly when you have JavaScript embedded in your page, rather than externally referenced.
XHTML要求您的页面严格符合XML标记要求 . 由于JavaScript可能包含具有特殊含义的字符,因此必须将其包装在CDATA中以确保验证不会将其标记为格式错误 .
你可以学习more about CDATA here和more about XHTML here .
当您要求严格的XHTML合规性时,您需要CDATA,并且&amprsands不会被标记为无效字符 .
CDATA表示其中的内容不是XML .
这是对wikipedia的解释