只要一提到把JavaScript放到网页中,就不得不涉及Web的语言核心——HTML。
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素。
HTML4.0.1为<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。
使用<script>元素的方式有两种:
- 直接在页面中嵌入JavaScript代码
- 包含外部JavaScript文件
包含在<script>元素内部的JavaScript代码将被从上至下依次解释。在解释器执行<script>元素内部的所有代码求职完毕以前,页面中的其余内容都不会被浏览器加载或显示。
外部文件被加载到当前页面中,在解析外部JavaScript文件(包括下载该文件)时,页面的处理也会暂时停止。
(1)直接在页面中嵌入JavaScript代码
在使用<script>元素嵌入JavaScript代码时,只需为<script>指定type属性。然后,像下面这样把JavaScript代码直接放在元素内部即可:
<script type="text/javascript"> alert("hello"); </script>
在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现“</script>”字符串。因为按照解析嵌入式代码的规则,当浏览器遇到字符串“</script>”时,就会认为那是结束的</script>标签,可以通过转义字符“\”解决这个问题:
<script type="text/javascript"> alert("<\/script>"); </script>
(2)包含外部JavaScript文件
如果要通过<script>元素来包含外部JavaScript文件,那么src属性就是必需的。这个属性的值是指向外部JavaScript文件的链接。例如:
<script type="text/javascript" src="demo.js"></script>
带有src属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的JavaScript代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。
注:按照惯例,外部JavaScript文件带有.js扩展名。但这个扩展名不是必须的,因为浏览器不会检查包含JavaScript的文件的扩展名。这样一来,使用JSP、PHP或其他服务端语言动态生成JavaScript代码也就成为了可能。但是,服务器通常还是需要看扩展名决定为响应应用哪种MIME类型。如果不使用.js扩展名,请确保服务器能返回正确的MIME类型。
(3)标签的位置
按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,这种做法的目的就是把所有外部文(包括CSS文件和JavaScript文件)的引用都放在相同的地方。
可是,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容。
对于那些需要很多JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。
为了避免这个问题,现代Web应用程序一般都把全部JavaScript引用放在<body>元素中页面内容的后面,也就是</body>结束标签前。