第二章 在HTML中使用JavaScript

293 阅读5分钟

1、<script>元素

<script>元素的属性

  • async:表示应该立即下载脚本,但不让页面等待两个脚本下载和执行,从而异步加载页面其他内容,只对外部脚本文件有效,不能保证异步脚本按照它们在页面中出现的顺序执行。
  • charset:表示通过 src 属性指定的代码的字符集。
  • defer:表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本文件有效,延迟脚本总是按照指定它们的顺序执行。IE7 及更早版本对嵌入脚本也支持这个属性。
  • src:表示包含要执行代码的外部文件。
  • type:表示编写代码使用的脚本语言的内容类型(也称为 MIME 类型)。虽然 text/javascript 和text/ecmascript 都已经不被推荐使用,但人们一直以来使用的都还是 text/javascript。实际上,服务器在传送 JavaScript 文件时使用的 MIME 类型通常是 application/x–javascript,但在 type 中设置这个值却可能导致脚本被忽略。另外,在非IE浏览器中还可以使用以下值:application/javascript和application/ecmascript。考虑到约定俗成和最大限度的浏览器兼容性,目前 type 属性的值依旧还是 text/javascript。不过,这个属性并不是必需的,如果没有指定这个属性,则其默认值仍为 text/javascript。

<script>元素的使用

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

在使用<script>嵌入 JavaScript 代码时,不要在代码中的任何地方出现"</script>"字符串。 例如,浏览器在加载下面所示的代码时就会产生一个错误:

<script type="text/javascript">
	function sayScript () {
        alert("</script>")
    }
</script>

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

<script type="text/javascript">
	function sayScript () {
        alert("<\/script>")
    }
</script>

需要注意的是,带有 src 属性的标签之间再 包含额外的 JavaScript 代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。

通过<script>元素的src属性还可以包含来自外部域的JavaScript文件,例如<script type="text/javasrcipt" src="http://www.somewhere.com/afile.js"></script>

2、嵌入代码与外部文件

外部文件与嵌入代码比较的好处

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

3、文档模式

三种文档模式

  • 混杂模式:浏览器的行为与(包含非标准特性的)IE5 相同
  • 准标准模式:浏览器特性有很多都是符合标准的,但也不尽然。不标准的地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显)
  • 标准模式:浏览器的行为更接近标准行为

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

准标准模式与标准模式非常接近,它们的差异几乎可以忽略不计。

开启标准模式

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

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

4、<noscript>元素

<noscript>元素用以在不支持 JavaScript 的浏览器中显示替代的内容。这个元素能够包含出现在<body>中的任何 HTML 元素——<script>元素除外。包含在<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>