script 元素和 noscript 元素

script 元素

<script src="index.js" type="text/javascript" charset="utf-8" 
        crossorigin="anonymous" defer async></script>

// src:脚本目标地址,即表示包含要执行代码的外部文件
// type:可选,表示编写代码使用的脚本的内容类型( 也称为 MIME 类型 );默认为 text/javascript,可以不写
// charset:可选,表示通过 src 属性指定的代码的字符集;大多数浏览器会忽略它的值,所以很少有人用它
// crossorigin:跨域脚本处理( 了解 )
// async、defer:脚本执行方式( 并行加载脚本 ),二者同时添加,同 async。具体见下面的 “JavaScript 加载”:

「 JavaScript 加载 」正常情况下,浏览器在解析 HTML 源文件时,若遇到外部的 script,那么解析过程会暂停,并发送请求来下载 script 文件,只有 script 完全下载并执行后才会继续执行 DOM 解析。

  • defer( 延迟脚本 )
    • 同时下载,执行:先 HTML 后 JS
    • 只对外部脚本文件有效
    • 即,脚本加载和 HTML 加载并行,但,脚本会被延迟到整个页面都解析完毕后再运行

=> 可以让脚本在文档完全呈现之后再执行;延迟脚本总是按照指定它们的顺序执行

  • async( 异步脚本 )
    • 标记为 async 的脚本并不保证按照指定它们的先后顺序执行
    • 只对外部脚本文件有效
    • 其目的是不让页面等待两个脚本下载和执行,脚本下载完毕后立即执行

=> 当前脚本不必等待其他脚本,也不必堵塞文档呈现;但不能保证按照它们在页面中出现的顺序执行


noscript 元素( 考虑禁用 JavaScript 的场景 )

使用 noscript 元素,可以指定在不支持脚本的浏览器中显示的替代内容;

但在启用了脚本的情况下,浏览器不会显示 noscript 元素中的任何内容。


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Example</title>
		<script type="text/javascript" src="./js/demo1.js" defer></script>
		<script type="text/javascript" src="./js/demo2.js" defer></script>
	</head>
	<body>
		<noscript>
			<p>本页面需要浏览器支持(启用)JavaScript。</p>
		</noscript>
	</body>
</html>

简单来讲,这个元素可以包含能够出现在文档 <body> 中的任何 HTML 元素 — <script> 元素除外,包含在 <noscript> 元素中的内容只有在下列情况( 即,不支持 JavaScript 的场景 )下才会显示出来:

  • 浏览器不支持脚本;
  • 浏览器脚本,但脚本被禁用。