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

第2章 在HTML 中使用JavaScript

2016-12-21 10:59 225 查看
2.1 <script>元素

使用<script>元素的方式有两种:直接在页面中嵌入JavaScript 代码和包含外部JavaScript文件。

在使用<script>元素嵌入JavaScript 代码时,只须为<script>指定type 属性。然后,像下面这

样把JavaScript 代码直接放在元素内部即可:

<script type="text/javascript">
function sayHi() {
alert("Hi!");
}
</script>

包含在<script>元素内部的JavaScript 代码将被从上至下依次解释。就拿前面这个例子来说,解释

器会解释一个函数的定义,然后将该定义保存在自己的环境当中。在解释器对<script>元素内部的所

有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示。

在使用<script>嵌入JavaScript 代码时,记住不要在代码中的任何地方出现"</script>"字符串。

例如,浏览器在加载下面所示的代码时就会产生一个错误:

<script type="text/javascript">
function sayScript() {
alert("</script>");
}
</script>
因为按照解析嵌入式代码的规则,当浏览器遇到字符串"</script>"时,就会认为那是结束的</script>标签。
而通过转义字符“/”可以解决这个问题,例如:

<script type="text/javascript">
function sayScript() {
alert("<\/script>");
}
</script>
这样写代码浏览器可以接受,因而也就不会导致错误了。

如果要通过<script>元素来包含外部JavaScript 文件,那么src 属性就是必需的。这个属性的值

是一个指向外部JavaScript 文件的链接,例如:

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

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

如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。

2.1.1 标签的位置

按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,例如:

<!DOCTYPE html>
<html>

<head>
<title>Example HTML Page</title>
<script type="text/javascript" src="example1.js"></script>
<script type="text/javascript" src="example2.js"></script>
</head>

<body>
<!-- 这里放内容 -->
</body>

</html>
这种做法的目的就是把所有外部文件(包括CSS 文件和JavaScript 文件)的引用都放在相同的地方。
可是,在文档的<head>元素中包含所有JavaScript 文件,意味着必须等到全部JavaScript 代码都被下载、

解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容)。对于

那些需要很多JavaScript 代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟

期间的浏览器窗口中将是一片空白。

为了避免这个问题,现代Web 应用程序一般都把全部JavaScript 引用放在<body>元素中页面内容的后面,

如下例所示:

<!DOCTYPE html>
<html>

<head>
<title>Example HTML Page</title>
</head>

<body>
<!-- 这里放内容 -->
<script type="text/javascript" src="example1.js"></script>
<script type="text/javascript" src="example2.js"></script>
</body>

</html>

这样,在解析包含的JavaScript 代码之前,页面的内容将完全呈现在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩

短而感到打开页面的速度加快了。

2.1.2 延迟脚本

HTML 4.01 为<script>标签定义了defer 属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。

也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer 属性,

相当于告诉浏览器立即下载,但延迟执行。

<!DOCTYPE html>
<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>
<!-- 这里放内容 -->
</body>
</html>
2.1.3 异步脚本
HTML5 为<script>元素定义了async 属性。这个属性与defer 属性类似,都用于改变处理脚本的行为同样与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.1.4 在XHTML中的用法

HTML5 正快速地被前端开发人员采用,建议读者在学习和开发中遵循HTML5 标准,本节内容可以跳过。

2.1.5 不推荐使用的语法



2.2 嵌入代码与外部文件

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

不过,并不存在必须使用外部文件的硬性规定,但支持使用外部文件的人多会强调如下优点。

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

维护起来就轻松多了。而且开发人员因此也能够在不触及HTML 标记的情况下,集中精力编辑JavaScript 代码。

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

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

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

的。

2.3 文档模式

<!-- 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>

2.4 <noscript>元素

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: