欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在HTML中使用JavaScript

程序员文章站 2022-03-04 22:13:40
...

1.script元素

要把JavaScript放到网页中,就不得不涉及web的核心语言——HTML,向HTML页面中插入JavaScript主要方法就是使用<script>元素,HTML4.01为<script>定义了下列6个属性。

1. async: 可选,表示应该立即下载脚本,但不妨碍页面中的其他操作,只对外部脚本文 件有效
2. charset: 可选,表示通过src属性指定的代码的字符集。
3. defer: 可选,表示脚本可以延迟到文档完全被解析和显示之后执行,只对外部脚本有效
4. language:已废弃,原本表示编写代码使用的脚本语言(如JavaScript、JavaScript1.2、VBScript),因为大多数浏览器会忽略此属性所以没有必要再用了
5. src:可选,表示包含要执行代码的外部文件,引入外部文件为必选属性
6. type:可选,可以看成是language的替代属性,表示编写代码使用的脚本语言的内容类型(也称为MIME类型),默认为text/javascript。

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

比如说:

<script>
	function sayHi(){
		alert('Hi!')
	}
	sayHi();
</script>

包含在script元素内部的JavaScript代码会被从上而下依次解析,切记在script元素内部不要出现</script>。按照解析嵌入式代码的规则,当浏览器遇到</script>元素的时候会将其当作结束</script>标签。

<script>
	function sayHi(){
		alert('</script>');    // 会报错
		alert('<\/script>');   // 使用\转义字符进行转义
	}
	sayHi();
</script>

如果要通过<script>标签引入外部JavaScript脚本,则src属性是必须的,这个src属性的值指向JavaScript文件的链接地址,例如:<script src = ‘outer.js’></script>。在这个例子中外部文件outer.js将被加载到当前页面中。外部文件只需包含通常要放在<script></script>内部的JavaScript代码即可。与解析嵌入式JavaScript代码一样,在解析外部js文件(包括下载)时,页面的处理也会暂时停止。

2.script标签的位置

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

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title></title>
    <script src='.postcssrc.js'></script>
  </head>
  <body>
    这里写内容
  </body>
</html>

这种做法的目的就是把所有的外部文件(包括css文件)的引用都放在相同的地方,可是
在文档的<head>元素中包含所有的JavaScript文件,意味着必须等到全部的JavaScript代码都被下载、解析和执行完成之后才能开始呈现页面的内容(body标签内的内容),对于那些需要很多JavaScript代码的页面来说,这出现了很明显的延迟,在延迟的期间浏览器的窗口呈现的是一片空白,为了避免这个问题,现在的JavaScript的引入都放在了 </body>上面,页面内容的后面。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title></title>
  </head>
  <body>
    这里写内容
     <script src='.postcssrc.js'></script>
  </body>
</html>

这样,在解析包含JavaScript代码之前,页面的内容完全呈现在浏览器中。

3.延迟脚本

HTML4.01为<script>定义了defer属性,表示脚本可以延迟到文档完全被解析和显示之后执行,只对外部脚本有效,相当于告诉浏览器立即下载,但延迟执行。来个例子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title></title>
    <script src='.postcssrc1.js' defer='defer'></script>
    <script src='.postcssrc2.js' defer='defer'></script>
  </head>
  <body>
    这里写内容
  </body>
</html>

在这个例子中,我们虽然把<script>标签放在<head>标签中,但其中的脚本将延迟到页面渲染完毕之后会立即执行,由于很多浏览器会忽略这个属性,所以还是把script标签放在 </body>上面,页面内容的后面比较好。

4.异步脚本

HTML5为script定义了async属性,这个属性和defer属性类似,都是用于改变处理脚本的行为,同样只对外部引入JavaScript脚本生效,并告诉浏览器立即下载文件,但是与defer不同的async不保证他们的先后顺序的执行。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title></title>
    <script src='.postcssrc1.js' sync></script>
    <script src='.postcssrc2.js' sync></script>
  </head>
  <body>
    这里写内容
  </body>
</html>

在上面的代码中,第二个脚本文件可能会比第一个脚本文件先执行,因此两者之间互不依赖非常重要。指定sync属性的目的不是让页面等待两个脚本文件下载和执行,从而加载页面其他内容,建议异步脚本不要在加载期间修改dom。
注意:异步脚本一定会在页面的load事件之前执行,但可能会在DOMContentLoaded事件触发之前或者之后执行。

相关标签: js基础