在HTML中使用JavaScript
1.<script>元素:向HTML页面中插入JavaScript的主要方法就是使用<scritp>元素。HTML4.01为<script>定义了下列6个属性。
(1)async:可选。表示立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
(2)charset:可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。
(3)defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。
(4)language:已废弃。原来用于表示编写代码使用的脚本语言,大多数浏览器会忽略这个属性。
(5)src:可选。表示包含要执行代码的外部文件。
(6)type:可选。可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型。目前type的值大多数仍旧使用text / javascript属性。这个属性并不是必须的,如果没有指定这个属性,则其默认值为text / javascript。
2.使用<script>元素的方式有两种:
(1)直接在页面中嵌入JavaScript代码:
在使用<script>元素嵌入JavaScript代码时,只需为<script>指定type属性值。然后,像下面这样把JavaScript代码直接放在元素内部即可:
<script type=” text / javascript”>
function sayHi ( ) {
alert ( “Hi! “ ) ;
}
</script>
包含在<script>元素内部的代码将被从上至下一次解析。注意,不要在代码中任何地方出现“</script>”字符串,否则会产生错误。因为浏览器遇到</script>时会认为这是结束标签。可以通过吧这个字符串分隔为两个部分可以解决这个问题,例如:
<script type=”text / javascript ”>
function sayScript(){
alert(“< /script>”);
}
这样就不会早晨浏览器的误解。
(2)包含外部JavaScript文件:如果要通过<script>元素来包含外部JavaScript文件,那么src属性就是必须的。这是属性的值是一个指向外部JavaScript文件的链接。例如:
<script type=”text / javascript” src=”example.js”> </script>
外部文件只需包含通常要放在开始的<script>和结束的</script>之间的那些JavaScript代码即可。可以在XHTML文档中省略</script>标签,例如:
<script type=” text / javascript ” src=”example.js” />
但是不能再HTML文档使用这种语法,原因是这种语法不符合HTML规范。而且也得不到某些浏览器的正确解析。
需要注意的是:带有src属性的<script>元素不应该只在其<script>和</script>标签之间再包含额外的JavaScript代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。
3.标签的位置:
所有<script>元素都应该放在界面的<head>元素中。例如:
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page </title>
<script type=”text / javascript” src=”example.js”></script>
<script type=”text / javascript” src=”example2.js”></script>
</head>
<body>
<!—这里放内容-->
</body>
</html>
这种做法就是要把所有外部文件的引用都放在相同的地方。这意味着必须等到所有JavaScript代码都被下载、解析和执行完成以后才能开始呈现页面的内容。对于需要很多JS代码的页面来说无疑会导致延迟。
为了避免这个问题,现代Web应用程序一般都把全部JavaScript引用放在<body>元素中页面的内容后面。如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page </title>
</head>
<body>
<!—这里放内容 -->
<script type=”text / javascript” src=”example.js” ></script>
<script type=”text / javascript” src=”example.js ” ></script>
</body>
</html>
这样,在解析包含JavaScript代码之前,页面的内容将完全呈现在浏览器中,而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快了。
4.脚本:
(1)延迟脚本:
HTML4.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>
html5规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,在现实当中,延迟脚本不一定按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。
(2)异步脚本:
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事件触发之前或之后执行。
5.嵌入代码与外部文件:
尽可能使用外部文件来包含JavaScript代码,有以下优点:可维护性、可缓存、适应未来。
6.文档模式:最初的两种文档模式是:混杂模式和标准模式。这两种模式主要影响CSS内容的呈现,某些情况下也会影响JavaScript的解释执行。
7.<noscript>元素:
早期浏览器都面临一个特殊问题,当浏览器不支持JavaScript时如何让页面平稳地退化。对这个问题的最终解决方案就是创造一个<noscript>元素,用以在不支持JavaScript的浏览器中显示替代的内容。这个元素可以包含能够出现在文档<body>中的任何HTML元素——<script>元素除外。包含在<noscript>元素中的内容只有在下列情况下才会显示出来:
(1)浏览器不支持脚本;
(2)浏览器支持脚本,但是脚本被禁用。
符合上述任何一个条件,浏览器都会显示<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>
这个页面会在脚本无效的情况下向用户显示一条消息。而在启用了脚本的浏览器中,用户永远也不会看到它——尽管它是页面的一部分。