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

换句话说,何时何地:

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

对此更可取:

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

#1楼

CDATA在任何XML方言中都是必需的,因为XML节点内的文本在被评估为JavaScript之前被视为子元素。 这也是JSLint抱怨正则表达式中<字符的原因。

参考文献

  • 创建声明性XML UI语言
  • 网络的未来:富客户端,富浏览器,富门户

#2楼

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


#3楼

的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中,适用不同的规则。 请注意,(非IE)浏览器仅在XHMTL文档带有XML内容类型时才使用XML解析器。

对于XML解析器, script标记并不比任何其他标记都要好。 特别地,脚本节点可以包含由“ < ”触发的非文本子节点。 “ & ”符号表示字符实体。

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

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

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

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


#4楼

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


#5楼

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

向后兼容。 要爱它。


#6楼

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


#7楼

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

CDATA表示以下各行(直到]]>内容都不是XML,因此不应以这种方式进行解析。


#8楼

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

这是维基百科的解释


#9楼

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

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

使用网络上的HTML页面,您只需在和标记之间包含所需的JavaScript。 当您验证网页上的HTML时,JavaScript内容被视为CDATA(字符数据),因此验证器将其忽略。 如果您遵循最新的XHTML标准来设置网页,则情况并非如此。 使用XHTML时,脚本标记之间的代码被认为是PCDATA(解析的字符数据),因此由验证器处理。

因此,您不能只在页面的脚本标签之间包含JavaScript而不会“破坏”您的网页(至少就验证器而言)。

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


#10楼

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

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

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

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


#11楼

当您希望它进行验证时 (使用XML / XHTML-谢谢Loren Segal )。


#12楼

当您要严格遵守XHTML时,需要使用CDATA,以使小于和与符号不会被标记为无效字符。


#13楼

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

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

有关此主题的出色文章,请参见https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm


#14楼

不要在HTML4使用CDATA,但你应该在XHTML使用CDATA,如果你有一个像<和>转义符号必须使用CDATA在XML。


#15楼

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

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

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

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

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

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

何时在脚本标记中需要CDATA节?相关推荐

  1. mapper中的CDATA标签的用法

    术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 "&& ...

  2. ELF文件中的各个节区

    版权声明:本文为CSDN博主「ashimida@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/lidan1 ...

  3. Mybatis XML文件中使用CDATA标签

    0.背景   当下,使用Mybatis的XML文件书写复杂SQL,依然是一种主流的选择.那么,我们在书写SQL语句时,要时刻提醒自己,自己正在书写一个XML文件,XML文件对于一些特殊字符,是会进行解 ...

  4. XML中的CDATA(字符数据)

    Introduction 介绍 The Term CDATA basically refers to Character Data. In XML it is basically a block of ...

  5. 在 Wiki 标记中添加无序列表

    项目:在 Wiki 标记中添加无序列表 在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占 据一行,并在前面放置一个星号.但是假设你有一个非常大的列表,希望添加前面 的星号.你可以在 ...

  6. 脚本标记 - 异步和延迟

    本文翻译自:Script Tag - async & defer I have a couple of questions about the attributes async & d ...

  7. Mybatis 中使用CDATA

    CDATA是什么 CDATA 是由XML定义的,跟Mybatis没啥关系. CDATA 指的是不由 XML 解析器进行解析的文本数据.被<![CDATA[]]>这个标记所包含的内容将表示为 ...

  8. HTML显示xml中的CDATA内容

    http://zhengjunwei2007-163-com.iteye.com/blog/656098 HTML中的<xmp>标签和XML中的<![CDATA []]>标签是 ...

  9. html怎么用脚本显示隐藏,使用隐藏状态而不是注释或自定义脚本标记来模板化HTML...

    Javascript最佳做法&惯例,例如John Resig和Nicholas Zachas强调的那些,可维护JavaScript一书的作者,建议使用HTML注释或带有自定义类型的脚本标签来存 ...

最新文章

  1. H.265的NALU
  2. 高性能JavaScript模板引擎原理解析
  3. 机器学习-cs229-线性回归-泰勒展开法
  4. 一步步编写操作系统 37 一级页表与虚拟地址2
  5. 网站服务器时间秒杀,Javascript实现商品秒杀倒计时(时间与服务器时间同步)...
  6. 前端开发之模块化初探
  7. android9谷歌推送,谷歌Android 9.0系统将统一推送以改善更新碎片化
  8. 遍历XML文挡树的两种算法
  9. 自己写的Point类
  10. JSK-391 公约公倍【入门】
  11. 项目本地发布到github并且上线可预览
  12. centos7.5部署mysql cluster NDB总结
  13. 《第一行代码》第三版之我的第一行Android代码(一)
  14. 2020年中国激光切割运控系统需求现状及竞争格局分析,高功率快速增长「图」
  15. 安卓Autojs逆向破解必备基础smail基础语法
  16. 智慧城市建设方案建议书——如何打造智慧城市
  17. 大数据营销中的尿布和啤酒
  18. java面试换背景颜色_正在修生养息,突然收到阿里(蚂蚁)面试电话,四面阿里面经总结...
  19. 完全掌握Python: 在一门课程中使用 Python 编程所需的一切 | Complete Python Mastery
  20. 大数据用什么软件python_大数据软件 python

热门文章

  1. IT部门如何应对VDI问题
  2. 仔仔手机安全卫士demo(四)
  3. 简化版XP按装IIS5.1实录
  4. java中double类型显示两个小数,比如12.00
  5. 27-React Lists and Keys
  6. WinForm窗体重要属性与公共控件的重要属性
  7. 简明Python3教程 15.异常
  8. Linux里常见术语的缩写
  9. Support Web Application Projects
  10. LAMP之apache调优