重要的事情写在前面,这东西对新手来说真是个巨坑,今天调整代码结构的时候,删掉了大量无用的注释,突然发现删着删着崩掉了,WTF,删注释都能删崩?!后来一行一行回滚,发现了

这个鬼东西,一删就报错,百度了一下,这东西不是注释,是有用的,具体用法看下方。

转载:https://blog.csdn.net/yucongyuqian/article/details/78561465

<script type=’text/javascript’>

//<![CDATA[

code…

//]]>

</script>

‘//<![CDATA[’ 和 ‘//]]>’为了兼容支持xml文档和不支持xml(即只支持html文档)文档的浏览器而设计的。

在支持xml文档中虽然用’//’注释掉代码但xml文档中仍可识别出属于xml的代码<![CDATA[  和 ]]>,所以代码中有大于’>’小于’<’之类的特殊字符不会发生错误,因为在xml文档中这些都是特殊字符。

而不支持xml文档中,这些大于小于号就不是特殊字符了,由于<![CDATA[  和 ]]>是xml代码所以不注释掉就会发生错误。

所以上述设计达到了兼容支持xml文档和不支持xml文档的要求。

这个网页是不是xml这要看文档类型声明,如<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<!–

<script type=’text/javascript’>

some code..

</script>

–>

这种方法兼容不支持javascript的浏览器,已经过时了,因为现在现代的浏览器都支持javascript

________________________________________________________________________________________________________________________________

http://book.51cto.com/art/200912/173123.htm

为了避免这样的问题,脚本内容通常会放在HTML注释(<!–和–>)中,这样即使是不支持JavaScript的浏览器,也会直接忽略该段脚本,但是新一代的浏览器则知道要执行该段脚本。

这是一种不正规的用法,但却广为流传。新一代的浏览器大多支持JavaScript特性,并且也能够识别位于HTML注释中的JavaScript代码段。然而,现在一些新的浏览器能够以XHTML方式解释网页,甚至是XML的方式,那么就会忽略所注释的代码段,在这些情况下,JavaScript就会被忽略,而不会被执行。所以,使用HTML注释来”隐藏”JavaScript代码的方式,已经不被推荐。

然而还有另一种”隐藏”代码的方式,那就是使用XML CDATA小节,这是现在所推荐的方法,特别是在XHTML文档中使用脚本代码时。示例1.3在示例1.2的基础上做了一些的修改,改为使用CDATA小节,修改的部分已加粗显示

*****************************************************************************************************************************************************************************************

http://www.cnblogs.com/Silvia/archive/2011/11/25/2263351.html

一、<script>元素

这个元素由Netscape创造并在Netscape Navigator 2中首先实现。后来,这个元素被加入到正式的HTML规范中。HMTL4.01为<script>定义了下列5个属性

 使用<script>元素的方式有2种

1、直接在页面嵌入JavaScript代码

<script type=”text/javascript”>

function sayHi()

{

alert(“Hello!”);

}

</script>

包含在<script>元素内部的JavaScript代码将被从上至下依次解释,在解释器<script>元素内部所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示

在使用<script>嵌入JavaScript代码时,记住不在要代码中任何地方出现”</script>”字符串,例如,浏览器在加载下面所示代码时就会产生一个错误

<script type=”text/javascript”>

function sayScript()

{

alert(“</script>”);

}

</script>

因为浏览器遇到字符串“</script>”时,会认为那是结束的</script>标签,而通过把字符串分割为2部分可以解决这个问题,如:

<script type=”text/javascript”>

function sayScript()

{

alert(“</scr”+”ipt>”);

}

</script>

2、通过<script>元素包含外部的JavaScript文件

<script type=”text/javascript” src=”js/login.js”></script>

注:带有src属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的JavaScript代码

另外,通过<script>元素的src属性还可以包含来自外部域的JavaScript文件,这一点既使<script>元素倍显强大,又让它备受争议。<script>与<img>元素非常相似,即它的src属性可以指入当前HTML页面所在的域之外的某个域中的URL,例如

<script type=”text/javascript” src=”http://www.somewhere.com/afile.js”></script>

这样,位于外部域中的代码也会被加载和解析,就像这些代码位于加载它们的页面中一样。利用这一点可以在必要时通过不同的域来提供JavaScript文件,不过,在访问自己不能控制的服务器上的JavaScript文件则要多加小心,否则文件中的代码随时有可能被替换

无论如何包含代码,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析……

标签的位置

习惯放于HTML页面的<head>标签中

但这样做有时会引起如<head></head>中的外部JS文件没解析完,延迟期间浏览器窗口空白,或者是JS在执行中,出现空对象异常(原因是HTML元素未加载到页面中),因此现在的WEB应用程序一般都把全部的JS引用放在<body>元素中,放在页面内容的后面。

延迟脚本

<script type=”text/javascript” src=”js/login.js” defer=”defer”></script>

Defer这个属性表示脚本会被延迟到整个页面都解析完毕再运行。实际上与上面介绍的把JS放在页面最底部的效果是一样的。

但不是所有浏览器都支持defer属性,因此建议使用“把JS引用放在<body>元素中,放在页面内容的后面”这个方法

 

在XHTML中的用法

     可扩展超文本标记语言,即XHTML(Extensible HyperText Markup Language),是将HTML作为XML的应用而重新定义的一个标准,编写XHTML代码的规则要比编写HTML严格得多,而且直接影响能否在嵌入JavaScript代码时使用<script />标签。以下面的代码块为例,虽然它们在HTML中是有效的,但在XHTML中则是无效的

<script type=”text/javascript”>

function compare(a,b)

{

if(a<b){

alert(“a is less than b”);

}else if(a>b){

alert(“a is greater than b”);

}else{

alert(“a is equal to b”);

}

}

</script>

这是由于a<b中的小于号在XHTML中被当作一个标签的开始,作为标签来讲,小于号后面不能跟空格,因此导致语法错误

解决方法:

1、  用相应的HTML实体(&lt;)替换代码中所有的小于号(<),替换后代码如下

<script type=”text/javascript”>

function compare(a,b)

{

if(a &lt; b){

alert(“a is less than b”);

}else if(a>b){

alert(“a is greater than b”);

}else{

alert(“a is equal to b”);

}

}

</script>

2、  用一个CData片段来包含JavaScript代码,在XHTML(XML)中,CData片段是文档中一个特殊区域,这个区域中可以包含不需要解析的任意格式的文本内容,

<script type=”text/javascript”>

function compare(a,b)<![CDATA[

{

if(a<b){

alert(“a is less than b”);

}else if(a>b){

alert(“a is greater than b”);

}else{

alert(“a is equal to b”);

}

}

]]>

</script>

在兼容XHTML的浏览器中,这个方法可以解决问题,实际上不少浏览器不兼容XHTML,因而不支持CData片段,怎么办呢?再使用JavaScript注释将CData标记注释掉就可以了:

<script type=”text/javascript”>

function compare(a,b)

//<![CDATA[

{

if(a<b){

alert(“a is less than b”);

}else if(a>b){

alert(“a is greater than b”);

}else{

alert(“a is equal to b”);

}

}

//]]>

</script>

这种格式在所有现代浏览器都可以正常使用,它能通过XHTML验证,而且对XHTML之前的浏览器也会平稳退化

不推荐使用的语法

<script><!–

function sayHi(){

alert(“Hello!”);

}

//–></script>

让不支持<script>元素的浏览器能够隐藏嵌入javascript代码。

由于现在所有浏览器都支持javascript,因此没必要再用这种格式了

嵌入代码与外部文件

在HTML嵌入javascript代码虽然没有问题,但一般认为最好的做法还是尽可能使用外中文件,优点如下

可维护性-遍及不同HTML页面的javascript代码会造成维护问题,但把所有javascript文件都放在一个文件夹中,维护起来就轻松多了,开发人员因此也能够在不触及HTML标记的情况下,集中精力编辑javascript代码

可缓存-浏览器能够根据具体的设置缓存链接的所有外部JS文件,也就是说,如果有2个页面都使用同一JS文件,这个文件只须下载一次,最终结果就是能够加快页面加载的速度

可适应未来-通过外部文件来包含javascript无须使用前面提到的XHTML或注释hack,HTML和XHTML包含外部文件的语法是相同的

二、文档模式

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

最初的2种文档模式是:混杂模式(quirks mode)和标准模式(standards mode),这2种模式主要影响CSS内容的呈现,但在某些情况也会影响JavaScript的解释执行。

如果在HTML文档开始处没有文档类型声明,浏览器会默认开启混杂模式,但采用混杂模式不是值得推荐的做法,因为不同浏览器的混杂模式行为差异非常大,如果不使用某些hack技术,跨浏览器的一致性就无法实现

三、<noscript>元素

当浏览器不支持JS时,使用<noscript>元素显示替代的内容

<noscript>元素可以包含能够出现在<body>中的任何HTML元素-<script>元素除外

包含在<noscript>元素中的内容只有在浏览器不支持脚本浏览器支持脚本,但脚本被禁用这2种情况下才会显示出来,除此外的其他情况下,浏览器都不会呈现<noscript>中的内容

四、小结

把JavaScript插入到HTML页面中要使用<script>元素,使用这个元素可以把JavaScript嵌入到HTML页面中,让脚本与标记混合在一起;也可以包含外部的JavaScript文件,而我们需要注意的地方有:

1、这2种方式都需要把type属性设置为 text/javascript,以表明使用的脚本语言是JavaScript

2、在包含外部JavaScript文件时,必须将src属性设置为指定相应文件的URL,而这个文件即可以是同一服务器上的文件,也可以是其他任何域中的文件

3、所有<script>元素会按照它们在页面中出现的先后顺序依次被解析,只有在解析完前面<script>元素的代码之后,才会开始解析<script>元素中的代码

4、浏览器在呈现后面的页面内容之前,必须先解析前面的<script>元素中的代码,为此,一般将<script>元素放在页面内容之后和</body>标签之前

5、在IE中,通过defer属性可以让浏览器呈现完文档之后再执行脚本,虽然defer属性是HTML4.01规定的,但只有IE支持该属性

6、<noscript>元素可以指定在不支持脚本或禁用脚本的浏览器中显示的替代内容,但在启用了脚本的情况下,浏览器不会显示<noscript>元素中的任何内容

/*CDATA*/介绍相关推荐

  1. php cdata,PHPcdata处理(详细介绍)_PHP教程

    PHPcdata处理(详细介绍)_PHP教程 当时在网上找了一个CDATA的转换器, 修改之后, 将CDATA标签给过滤掉.如下 代码如下: // States: // // 'out' // ' / ...

  2. ![CDATA[]] 的基本介绍

    被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容"<".  此标记用于xml文档中,我们 ...

  3. ![CDATA[]] 的基本介绍

    被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容"<".  此标记用于xml文档中,我们 ...

  4. FLEX SharedObject介绍及应用

    ShareObject介绍: 1 ShareObject,顾名思义共享对象,而通常意义上的共享,从B/S结构上来讲,无非是客户端(浏览器端)的共享和服务器端的共享了,不错,ShareObject刚好份 ...

  5. matlab scatter cdata,matlab cdatamapping

    (x,y,z,'Cdata',flipud(c1),'FaceColor','texturemap',... 'EdgeColor','none','CDataMapping','direct','A ...

  6. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  7. [python知识] 爬虫知识之BeautifulSoup库安装及简单介绍

    一. 前言         在前面的几篇文章中我介绍了如何通过Python分析源代码来爬取博客.维基百科InfoBox和图片,其文章链接如下:         [python学习] 简单爬取维基百科程 ...

  8. LmgORM项目: 介绍

      LmgOrm介绍  目 录  第一章:前言... 3 第二章:系统层次划分... 3 第三章:LmgOrm数据库访问层... 3 第四章:LmgOrm ORM.. 4 一:LmgOrm O/R M ...

  9. mysql mybatis cdata_mybatis中<![CDATA[]]>的用法

    目录 一.介绍 二.注意事项 三.使用范例 一.介绍 在mybatis的xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用来 ...

最新文章

  1. Hadoop2.7.0伪分布式安装教程
  2. logrotate测试_使用 logrotate 对 apache/nginx 日志切割
  3. 推荐VSCode12个比较实用的插件
  4. ubuntu18.04升级python_Ubuntu18.04一次性升级Python所有库的方法步骤
  5. hadoop 集群启动时 Address already in use 解决方法
  6. jqGrid表格展示简单实例
  7. 在Session中存储和获取
  8. grafana监控oracle11g,Grafana展示zabbix监控数据
  9. centos下搭建dhcp服务器
  10. 使用定位技术,边界判断要谨慎
  11. 架构设计——缓存层设计思维导图总结
  12. 浅谈视频编解码器的工作原理和应用领域
  13. 获取WIN7的trustedinstaller权限
  14. 怎样在苹果Mac鼠标或触控板上复制和粘贴?
  15. bootstrap表格自动换行
  16. 提醒我 做学问要刨根究底
  17. 微信小程序版的登录注册
  18. YFX云分享软件库驾培不可或缺的教学工具。
  19. 身份证属地查询,国内身份证号码查询验证(酒店管理系统自动化)
  20. TCP/IP协议栈之LwIP(六)---网络传输管理之TCP协议

热门文章

  1. A - Multiplication Dilemma (思维)( 2018 ACM ICPC Arabella Collegiate Programming Contest)
  2. 如何解决Mathtype在Word中功能区是灰色的情况
  3. 猿创征文 | 专做药品生产研发的程序员
  4. 物联网毕设分享 STM32 wifi照明控制系统 - 智能路灯(毕设分享)
  5. 计算机所有以太网适配的ip,演示win10电脑以太网没有有效的ip配置
  6. 【数学模拟卷总结】2023李林六套卷数学二第三套
  7. SSM在线电影平台 在线观看电影平台 电影推荐平台系统Java Vue MySQL数据库 远程调试 代码讲解
  8. 「表白神器」Python超火隐藏表白图 你能看出来吗?「附源码」
  9. 十月3倍销量于特斯拉的比亚迪,新增量在何处?
  10. 要闻君说:小米9已确认无线充电;华为着手操作的5G火车站启动建设仪式将于本月18日“登陆”;三星提出大力发展电信网络设备业务……...