2.1 <script>
元素
-
HTML5 中为
<script>
元素定义了下列 6 个属性- async:可选;示意应该立刻下载脚本,但不应障碍页面中的其余操作,比方下载其余资源或期待加载其余脚本;只对外部脚本无效;
- charset:可选;示意通过 src 属性置顶的代码的字符集;大多数浏览器会疏忽这个值;
- defer:示意脚本能够提早到文档齐全被解析和显示之后再执行;只对外部脚本无效;扭转 script 元素加载程序
- language:已废除;
- src
- type:必选;示意编写代码应用的脚本语言的内容类型(也称为 MIME 类型)
- 蕴含在
<script>
元素外部的 JavaScript 代码将被从上到下顺次解释 - 不要在代码中的任何地位出
</script>
字符串,即便是alert('</script>')
,但能够应用转义字符“\”解决,eg:alert('<\/script>')
- 在解析内部 JavaScript 文件(包含下载该文件)时,与解析嵌入式 JavaScript 代码一样,页面的解决也会临时进行
- 内部 JavaScript 文件带有.js 扩展名,然而这个扩展名不是必须的,因为浏览器不会查看蕴含 JavaScript 的文件的扩展名,然而服务器通常还是须要看扩展名决定为响应利用哪种 MIME 类型
- 带有 src 属性的
<script>
元素两头不应该再呈现其余代码,即便有,也只会加载内部 src 中的脚本文件,<script>
元素两头的代码会被疏忽
2.1.1 标签的地位
依照传统的做法,所有的 <script>
元素都应该放在页面的 <head>
元素中,然而为什么当初不这样做?
首先说,这种做法的目标就是把所有的内部文件的援用都放在雷同的中央;
然而,在文档的 <head>
元素中蕴含所有 JavaScript 文件,意味着必须等到所有的 JavaScript 文件都下载、解析、执行结束之后,才开始出现页面内容,这会使得浏览器在出现页面时呈现显著的提早,在这期间页面一片空白,因而当初的通用做法是,将 JavaScript 援用放在 <body>
元素中页面内容的前面
2.1.2 提早脚本 –defer 属性
- 这个属性的用处:表明脚本在执行时不会影响页面的结构,即脚本会被提早到整个页面都解析结束后再运行(立刻下载,但提早执行)
- HTML5 标准要求脚本依照他们呈现的先后顺序执行,因而几个提早脚本同时呈现的时候,会依照程序提早执行,且这些提早脚本会先于 DOMContentLoaded 事件
- 在事实中,提早脚本不肯定会依照程序执行,也不肯定会在 DOMContentLoaded 事件触发前执行,因而最好只蕴含一个提早脚本
- 局部浏览器会疏忽 defer 属性,因而,把提早脚本放在页面底部依然是最佳抉择
2.1.3 异步脚本 –async 属性
- 与 defer 属性不同之处:async 的脚本并不保障依照指定他们的先后顺序执行,因而确保脚本之间互不依赖十分重要
- 倡议异步脚本不要在加载期间批改 DOM
- 异步脚本肯定会在页面的 load 事件前执行,但可能会在 DOMContentLoaded 事件触发前或者后执行
2.1.4 在 XHTML 中的用法 —- 略
2.1.5 不举荐应用的用法 – 不反对 JavaScript 的浏览器曾经不存在 – 略
2.2 嵌入代码与内部文件
在 HTML 中嵌入 JavaScript 代码没有问题,然而个别认为最好的做法还是尽可能应用内部文件来蕴含 JavaScript 代码,长处:
- 可维护性:遍布不必 HTML 页面的 JavaScript 会造成保护问题
- 可缓存:浏览器可能依据具体的设置缓存链接的所有内部 JavaScript 文件
- 适应将来:XHTML 和 HTML 蕴含内部文件的语法是雷同的
2.3 文档模式
-
IE5.5 引入文档模式的概念,这个概念是通过应用文档类型切换实现的,最后的文档模式分为两种:
- 混淆模式:会让 IE 的行为与蕴含非标准个性的 IE5 雷同
- 规范模式:让 IE 行为更靠近规范行为
尽管这两种模式次要影响 CSS 内容的出现,但在某些状况下也会影响到 JavaScript 的解释执行
- 在此之后,IE 又提出一种 准规范模式:浏览器个性很多都是符合标准的,这种模式能够通过应用过渡型或者框架集型文档类型来触发
- 如果在文档开始处没有发现文档类型阐明,则所有浏览器都会默认开启混淆模式
- 准规范模式和规范模式十分靠近,个别提到规范模式,指的是除混淆模式以外的其余模式
2.4 <noscript>
元素
- 晚期浏览器面临一个问题:即当浏览器不反对 JavaScript 时如何让页面安稳进化。—-
<noscript>
元素 -
蕴含
<noscript>
元素中的内容只有在下列状况才会显示进去:- 浏览器不反对脚本
- 浏览器反对脚本,然而脚本被禁用
除此之外,浏览器不会出现
<noscript>
元素中的内容
本文由 mdnice 多平台公布