script
元素中的属性
属性 | 作用 |
---|---|
async | 表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或等待其他脚本加载。只对外部脚本文件有效。 |
charset | 使用src 属性指定的代码字符集。 |
crossorigin | 配置相关请求的CORS(跨源资源共享)设置。默认不使用CORS。crossorigin="anonymous" 配置文件请求不必设置凭据标志。crossorigin="use-credentials" 设置凭据标志,意味着出站请求会包含凭据。 |
defer | 表示脚本可以延迟到文档完全被解析和显示之后再执行。 |
integrity | 允许比对接收到的资源和指定的加密签名以验证子资源完整性。如果接收到的资源的签名与这个属性指定的签名不匹配,则页面会报错,脚本不会执行。这个属性可以用于确保内容分发网络(CDN,Content Delivery Network)不会提供恶意内容。即为了防止 CDN 篡改 javascript 用的。 |
src | 表示包含要执行的代码的外部文件。 |
-
script
会使页面阻塞,阻塞时间也包含下载文件时间。 -
为什么把
script
标签放在body
元素中的页面内容后面,而不是在head
中:把JS文件放在
<head>
里,也就意味着必须把所有js代码都下载、解析和解释完成后,才能渲染页面,会导致渲染页面明显延迟,在此期间浏览器窗口完全空白,为了解决这个问题,现在通常把<script>
标签放在body的内容后面。这样一来,页面会在处理js
代码前完成渲染页面,用户体验得到提升。 -
defer
的作用:defer
表示脚本会延迟到整个页面解析完毕之后再运行。因此在<script>
元素中设置defer
属性,相当于告诉浏览器立即下载,但延迟执行。第一个推迟的脚本会在第二个推迟的脚本之前执行,而且两者都会在DOMContentLoaded
事件之前执行。不过在实际当中,推迟执行的脚本不一定总会按顺序执行或者在DOMContentLoaded
事件之前执行,因此最好只包含一个这样的脚本。 -
async
的作用:async
会告诉浏览器立即下载js脚本,与defer
不同的是,标记为async
的脚本并不保证能按照他们出现的次序执行。给脚本添加async
属性的目的是告诉浏览器,不必等脚本下载和执行完后再加载页面,同样也不必等到该异步脚本下载和执行后再加载其他脚本。正因为如此,异步脚本不应该在加载期间修改DOM。另外,不是所有浏览器都支持async
属性。 -
文档模式:
- 混杂模式:让IE像IE5一样支持一些非标准的特性;
- 标准模式:让IE具有兼容标准的行为;
- 准标准模式: 让浏览器支持很多标准的特性,但是没有标准规定的那么严格,
混杂模式和标准模式主要区别只体现在通过CSS渲染的内容方面,但对JS也有一些关联印象,或者称为副作用。而准标准模式主要区别在于如何对待图片元素周围的空白(在表格中使用图片时最明显)。
主要以混杂模式 和 标准模式(即混杂模式以外的模式)为主。
-
noscript
元素当浏览器不支持脚本 或 浏览器对脚本的支持被关闭时,包含在
<body>
中的<noscript>
中的内容就会被渲染。
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script defer="defer" src="example1.js"></script>
<script defer="defer" src="example2.js"></script>
</head>
<body>
<noscript>
<p>This page requires a JavaScript-enabled browser.</p>
</noscript>
</body>
</html>