【JS高级程序设计】 第二章 使用JavaScript

【JS高级程序设计】 第二章 使用JavaScript

2.1 “script”元素

向 HTML 页面中插入 JavaScript 的主要方法,就是使用</script>元素。这个元素由 Netscape 创造 并在 Netscape Navigator 2 中首先实现。后来,这个元素被加入到正式的 HTML 规范中。HTML 4.01 为 </script>定义了下列 6 个属性:

  • async : 可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
  • charset:可选。表示通过 src 属性指定的代码的字符集。由于大多数浏览器会忽略它的值, 因此这个属性很少有人用。
  • defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。IE7 及更早版本对嵌入脚本也支持这个属性。
  • language:已废弃。原来用于表示编写代码使用的脚本语言(如 JavaScript、JavaScript1.2 或 VBScript)。大多数浏览器会忽略这个属性,因此也没有必要再用了。
  • src:可选。表示包含要执行代码的外部文件。
  • 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。

##2.1.3 异步脚本

HTML5为script元素定义了async属性。同样与 defer 类似,async 只适用于外部脚本文件,并告诉浏览器立即下载文件。但与 defer 不同的是,标记为 async 的脚本并不保证按照指定它们的先后顺序执行。

<!DOCTYPE html> 
<html>
  <head> 
    <title>Example HTML Page</title> 
    <script type="text/javascript" async src="example1.js"></script> 
    <script type="text/javascript" async src="example2.js"></script> 
  </head> 
  <body> 
    <!-- 这里放内容 --> 
  </body> 
</html>

第二个脚本可能会在第一个脚本之前执行,因此,需要确认两者没有相互的依赖关系。

指定 async 属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。 为此,建议异步脚本不要在加载期间修改 DOM。

异步脚本一定会在页面的 load 事件前执行,但可能会在 DOMContentLoaded 事件触发之前或之 后执行。支持异步脚本的浏览器有 Firefox 3.6、Safari 5 和 Chrome。

2.2嵌入代码与维护性

在 HTML 中嵌入 JavaScript 代码虽然没有问题,但一般认为最好的做法还是尽可能使用外部文件来 包含 JavaScript 代码。不过,并不存在必须使用外部文件的硬性规定,但支持使用外部文件的人多会强 调如下优点。

  • 可维护性:遍及不同 HTML 页面的 JavaScript 会造成维护问题。但把所有 JavaScript 文件都放在 一个文件夹中,维护起来就轻松多了。而且开发人员因此也能够在不触及 HTML 标记的情况下, 集中精力编辑 JavaScript 代码。
  • 可缓存:浏览器能够根据具体的设置缓存链接的所有外部 JavaScript 文件。也就是说,如果有两个 页面都使用同一个文件,那么这个文件只需下载一次。因此,最终结果就是能够加快页面加载的 速度。
  • 适应未来:通过外部文件来包含 JavaScript 无须使用前面提到 XHTML 或注释 hack。HTML 和 XHTML 包含外部文件的语法是相同的。

#2.4<\noscript>元素

noscript里面内容显示的前提条件:

  • 浏览器不支持脚本
  • 支持脚本但是禁用
//html页面
<noscript>
    <p>本页面需要浏览器支持(启用)JavaScript。 
</noscript>

2.5小结

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

  • 在包含外部 JavaScript 文件时,必须将 src 属性设置为指向相应文件的 URL。而这个文件既可 以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。

  • 所有</script>元素都会按照它们在页面中出现的先后顺序依次被解析。 在不使用 defer 和 async 属性的情况下, 只有在解析完前面 </script> 元素中的代码之后, 才会开始解析后面 </script>元素中的代码。

  • 由于浏览器会先解析完不使用 defer 属性的</script>元素中的代码,然后再解析后面的内容, 所以一般应该把</script>元素放在页面最后,即主要内容后面,</body>标签前面。

  • 使用 defer 属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。

  • 使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行

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

评论