您的位置:首页 > Web前端 > JavaScript

avaScript高级程序设计之在 HTML 中使用 JavaScript 第2.2讲笔记

2015-09-25 23:06 507 查看
2.2 嵌入代码与外部文件

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

包含 JavaScript 代码。不过,并不存在必须使用外部文件的硬性规定,但支持使用外部文件的人多会强

调如下优点。

  可维护性:遍及不同 HTML 页面的 JavaScript 会造成维护问题。但把所有 JavaScript 文件都放在

一个文件夹中, 维护起来就轻松多了。 而且开发人员因此也能够在不触及 HTML 标记的情况下,

集中精力编辑 JavaScript 代码。

  可缓存:浏览器能够根据具体的设置缓存链接的所有外部 JavaScript文件。也就是说,如果有两个

页面都使用同一个文件,那么这个文件只需下载一次。因此,最终结果就是能够加快页面加载的

速度。

  适应未来:通过外部文件来包含 JavaScript 无须使用前面提到 XHTML 或注释 hack。HTML 和

XHTML 包含外部文件的语法是相同的。

2.3 文档模式
IE5.5 引入了文档模式的概念,而这个概念是通过使用文档类型(doctype)切换实现的。最初的两

种文档模式是:混杂模式(quirks mode)

① 和标准模式(standards mode) 。混杂模式会让 IE 的行为与(包

含非标准特性的)IE5 相同,而标准模式则让 IE 的行为更接近标准行为。虽然这两种模式主要影响 CSS

内容的呈现,但在某些情况下也会影响到 JavaScript 的解释执行。本书将在必要时再讨论这些因文档模

式而影响 JavaScript 执行的情况。

在 IE 引入文档模式的概念后,其他浏览器也纷纷效仿。在此之后,IE 又提出一种所谓的准标准模

式(almost standards mode) 。这种模式下的浏览器特性有很多都是符合标准的,但也不尽然。不标准的

地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显) 。

如果在文档开始处没有发现文档类型声明,则所有浏览器都会默认开启混杂模式。但采用混杂模式

不是什么值得推荐的做法,因为不同浏览器在这种模式下的行为差异非常大,如果不使用某些 hack 技

术,跨浏览器的行为根本就没有一致性可言。

对于标准模式,可以通过使用下面任何一种文档类型来开启:

<!-- 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/xhtml1/DTD/xhtml1-strict.dtd">

<!-- HTML 5 -->

<!DOCTYPE html>

而对于准标准模式,则可以通过使用过渡型(transitional)或框架集型(frameset)文档类型来触发,

如下所示:

<!-- 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 XHTML 1.0 Frameset//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

准标准模式与标准模式非常接近,它们的差异几乎可以忽略不计。因此,当有人提到“标准模式”

时,有可能是指这两种模式中的任何一种。而且,检测文档模式(本书后面将会讨论)时也不会发现什

么不同。本书后面提到标准模式时,指的是除混杂模式之外的其他模式。

2.4  <noscript> 元素

早期浏览器都面临一个特殊的问题,即当浏览器不支持 JavaScript 时如何让页面平稳地退化。对这

个问题的最终解决方案就是创造一个 <noscript> 元素,用以在不支持 JavaScript 的浏览器中显示替代

的内容。 这个元素可以包含能够出现在文档 <body> 中的任何 HTML 元素—— <script> 元素除外。 包含

在 <noscript> 元素中的内容只有在下列情况下才会显示出来:

  浏览器不支持脚本;

  浏览器支持脚本,但脚本被禁用。

符合上述任何一个条件,浏览器都会显示 <noscript> 中的内容。而在除此之外的其他情况下,浏

览器不会呈现 <noscript> 中的内容。

请看下面这个简单的例子:

<html>

<head>

<title>Example HTML Page</title>

<script type="text/javascript" defer="defer" src="example1.js"></script>

<script type="text/javascript" defer="defer" src="example2.js"></script>

</head>

<body>

<noscript>

<p> 本页面需要浏览器支持(启用)JavaScript 。

</noscript>

</body>

</html>

这个页面会在脚本无效的情况下向用户显示一条消息。而在启用了脚本的浏览器中,用户永远也不

会看到它——尽管它是页面的一部分。

2.5 小结

把 JavaScript 插入到 HTML 页面中要使用 <script> 元素。使用这个元素可以把 JavaScript 嵌入到

HTML页面中,让脚本与标记混合在一起;也可以包含外部的 JavaScript文件。而我们需要注意的地方有:

  在包含外部 JavaScript 文件时,必须将 src 属性设置为指向相应文件的 URL。而这个文件既可

以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。

  所有 <script> 元素都会按照它们在页面中出现的先后顺序依次被解析。在不使用 defer 和

async 属性的情况下,只有在解析完前面 <script> 元素中的代码之后,才会开始解析后面

<script> 元素中的代码。

  由于浏览器会先解析完不使用 defer 属性的 <script> 元素中的代码,然后再解析后面的内容,

所以一般应该把 <script> 元素放在页面最后,即主要内容后面, </body> 标签前面。

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

  使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚

本按照它们在页面中出现的顺序执行。

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

的情况下,浏览器不会显示 <noscript> 元素中的任何内容。

——————————

① 这里 quirks mode 的译法源自 Firefox 3.5.5中文版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息