前端快速上手,你需要了解的如何在HTML中使用JavaScript

前言

本文主要介绍如何在HTML中使用JavaScript,很适合上手JavaScript的一篇文章。

<script>元素

向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素。
HTML为<script>定义了下列6个属性:

  • async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
  • charset:可选。表示通过 src 属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。
  • defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。 IE7 及更早版本对嵌入脚本也支持这个属性。
  • language:已废弃。原来用于表示编写代码使用的脚本语言(如 JavaScript、 JavaScript1.2或 VBScript)。大多数浏览器会忽略这个属性,因此也没有必要再用了。
  • src:可选。表示包含要执行代码的外部文件。
  • type:可选。可以看成是 language 的替代属性。

<script>元素的使用方式

使用<script>元素的方式有两种:

  • 直接在页面中嵌入JavaScript代码
    只须为<script>指定 type 属性。然后,像下面这样把 JavaScript 代码直接放在元素内部即可:
<script type="text/javascript">
	function sayHi(){
		alert("Hi!");
	}
</script>

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

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

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

<script type="text/javascript">
	function sayScript(){
		alert("<\/script>");
	}
</script>
  • 包含外部JavaScript文件
    如果要通过<script>元素来包含外部 JavaScript 文件,那么 src 属性就是必需的。这个属性的值是一个指向外部 JavaScript 文件的链接,例如:
<script type="text/javascript" src="example.js"></script>

需要注意的是,带有 src 属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的 JavaScript 代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略

另外,通过<script>元素的 src 属性还可以包含来自外部域的 JavaScript 文件。这里的用法和<img>元素十分相似,但是会存在安全性问题,所以要小心使用。

<script type="text/javascript" src="http://www.somewhere.com/afile.js"></script>

标签的位置

按照传统的做法,所有<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 代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。

为了避免这种问题,现在一般把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 代码之前,页面的内容将完全呈现在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快了。

延迟脚本

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>

虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟
到浏览器遇到</html>标签后再执行。

异步脚本

同样与 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。

嵌入代码与外部文件

在 HTML 中嵌入 JavaScript 代码虽然没有问题,但一般认为最好的做法还是尽可能使用外部文件来包含 JavaScript 代码。不过,并不存在必须使用外部文件的硬性规定,但支持使用外部文件的人多会强调如下优点。

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

<noscript>元素

早期浏览器都面临一个特殊的问题,即当浏览器不支持 JavaScript 时如何让页面平稳地退化。对这个问题的最终解决方案就是创造一个<noscript>元素,用以在不支持 JavaScript 的浏览器中显示替代的内容。这个元素可以包含能够出现在文档<body>中的任何 HTML 元素——<script>元素除外。包含在<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>

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

小结

把 JavaScript 插入到 HTML 页面中要使用<script>元素。使用这个元素可以把 JavaScript 嵌入到HTML 页面中,让脚本与标记混合在一起;也可以包含外部的 JavaScript 文件。而我们需要注意的地方有:

  • 在包含外部 JavaScript 文件时,必须将 src 属性设置为指向相应文件的 URL。而这个文件既可以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。
  • 所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析。在不使用 defer 和async 属性的情况下,只有在解析完前面<script>元素中的代码之后,才会开始解析后面<script>元素中的代码。
  • 由于浏览器会先解析完不使用 defer 属性的<script>元素中的代码,然后再解析后面的内容,所以一般应该把<script>元素放在页面最后,即主要内容后面, </body>标签前面。
  • 使用 defer 属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。
  • 使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客不撩妹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值