javascript高级程序设计(第三版)-第二章 基本概念-学习笔记

 在HTML中使用Javascript

一:基本定义

HTML4.01为<script>定义了6个属性:

1.async:可选,表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或是等待加载其他脚本。该属性只对外部脚本文件有效。

2、charset:可选,表示通过src属性指定的代码的字符集,该属性很少使用。

3、defer:可选,表示脚本可以延迟到文档完全被解析完成之后在执行,该属性只对外部脚本文件有效。

4、language:已废弃,

5、src:可选,表示要包含执行代码的外部文件。

6、type:可选,可以看成是language的替代属性。表示编写代码使用的脚本语言的内容类型,也称MIME类型。虽然text/javascript和text/ecmascript都已经不被推荐使用,但是人们一直以来使用的都是text/javascript. 实际上,服务器在传送javascript文件时使用的是MIME类型是application/x-javascript,但在type中设置这个值却可能导致脚本被忽略。另外,在非IE浏览器中还可以使用application/javascript 和application/ecmascript.考虑到约定俗成和最大限度的浏览器兼容性,目前type属性的值依旧还是text/javascript。不过这个属性并不是必须的,其默认值依然是text/javascript。

二:基本使用

  1.使用script的方式有2中,直接在也页面嵌入javascript代码和包含外部javascript文件。

  2.在嵌入javascript代码是,千万不要在代码中出现"</script>"的字符串。因为当浏览器遇到"</script>"时,就会认为那是结束的</script>标签。 不过通过转义字符“\” 可以解决这个问题。

 3.关于<script /> 和<script></script>在引用外部文件时候的区别:

    在XHMTL中可以使用<script /> 这种方式。

    在HTML中不可以使用<script />这种语法。因为这中语法不符合HTML规范,而且也得不到某些浏览器(尤其是IE)的支持

 4. 带有src属性的<script>元素不应该在其<script>和</script>标签之间在包含额外的javascript代码。如果包含了,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。

3.标签的位置

   1、按照传统的写法,所有的<script>元素都是放在页面的<head>元素中,意味着必须等到全部的javascript代码全部都被下载,解析和执行完成后,才开始页面内容的呈现(浏览器在遇到<body>标签时,才开始呈现内容),对于需要很多javascript代码的页面来说,这无疑导致浏览器在呈现页面的时候出现明显的延迟,而延迟期间的浏览器窗口一片空白。为了避免这个问题,现在web应用程序一般都把全部的javascript引用放在<body>元素中页面内容的后面,如下所示:

<!DOCTYPE html>
<html>
<head></head>
<body>
     <!--这里是内容-->
     <script type="text/javascript" src="1.js"></script>
     <script type="text/javascript" src="2.js"></script>
</body>
</html>

这样,在解析包含javascript代码之前,页面的内容就完成呈现在浏览器中了。

延迟脚本

<!DOCTYPE html>
<html>
    <head>
         <script type="text/javascript" defer="defer" src="1.js"></script>
         <script type="text/javascript" defer="defer" src="2.js"></script>
    </head>
    <body>
          <!--这里放内容-->
    </body>
</html>

<script>标签定义了的defer属性,这个属性的用途是表明脚本在执行时不会影响页面的构造,也就是说,脚本会被延迟到页面都解析完成之后在运行。因此,在<script>中设置defer属性,相当于就是告诉浏览器立即下载,但是延迟执行。

按照HTML5规范要求,脚本会按照他们出现的先后顺序执行,因此,第一个延迟脚本会先于第二个延迟脚本执行,而这2个脚本会先于DOMContentLoaded事件执行(后续说明)。但是在现实中,延迟脚本不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。还想在说一点的就是defer属性只适用与外部脚本文件。

异步脚本:

<!DOCTYPE html>
<html>
    <head>
         <script type="text/javascript" async src="1.js"></script>
         <script type="text/javascript" async src="2.js"></script>
    </head>
    <body>
          <!--这里放内容-->
    </body>
</html>
async这个属性与defer属性类似,都用于处理脚本的行为,同样async也只使用于外部脚本文件,并告诉浏览器立即下载,但是与defer不同的是,标记为async的脚本并不保证按照他们指定的先后顺序执行。在上面的代码中,2.js可能会先于1.js执行,因此确保2个js文件互不依赖非常重要。指定async属性的目的是不让页面等待2个脚本的下载和执行,从而异步加载页面其他内容,为此,建议脚步脚本不要在加载期间修改DOM。在XHTML文档中,要把async属性设置为async=“async”

文档模式

IE5.5引入了文档模式的概念,最初的两种文档模式是:混杂模式(quirks mode)和标准模式(standards mode).混杂模式会让IE的行为与IE5相同,而标准模式更接近标准行为,这2中模式主要是影响CSS内容的呈现,但是在某些情况下会影响javascript的解释执行。

在IE引入文档模式的概念后,其他浏览器纷纷也仿效,在此之后,IE又提出一个所谓的准标准模式(almost standards mode),这种模式下的浏览器特性有很多是符合标准的,但也不尽然。如果在文档的开始没有发现文档类型的声明,则所有浏览器都默认开启混杂模式。但是采用混杂模式不值得推荐,因为不同的浏览器在这种模式下的差异非常大。

对于标准模式,可以采用如下文档类型来开启:

<!--HTML 4.01 严格型-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<!--XHTML 1.0 严格型-->
<!DOCTYPE html PUBLIC
 "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd">

<!--html5-->
<!DOCTYPE html>
而对于准标准模式,则可以使用过度型或是框架集型文档类型来触发
<!--HTML 4.01 过渡性-->
<!DOCTYPE HTML PUBLIC
 "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">

<!--HTML 4.01 框架集型--->
<!DOCTYPE HTML PUBLIC
 "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">

<!--XHTML 1.0 过渡型--->
<!DOCTYPE HTML PUBLIC
 "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!--XHTML 1.0 框架集型--->
<!DOCTYPE HTML PUBLIC
 "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
标准模式与准标准模式非常接近,他们的差异几乎可以忽略不计。

你可能感兴趣的:(javascript高级程序设计(第三版)-第二章 基本概念-学习笔记)