Window.onload与脚本延迟

13 html javascript

这里说,html文档有4个readyState可能的值:

未初始化 - 尚未开始加载尚未
加载 - 正在加载
交互式 - 已加载足够且用户可以与其
完成交互- 完全加载

这里据说,基本上,defer告诉浏览器在执行该脚本块中的javascript之前等待"直到它准备好".通常这是在DOM完成加载之后document.readyState == 4

所以问题是先执行什么以及为什么 - <script defer src="...">或者window.onload=function(){...} ?

Ry-*_*Ry- 14

请继续阅读http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#attr-script-defer:

可以使用这些属性选择三种可能的模式.如果该async属性存在,则脚本将一旦可用就异步执行.如果该async 属性不存在但defer属性存在,则在页面完成解析时执行脚本.如果两个属性都不存在,则在用户代理继续解析页面之前立即获取并执行脚本.

http://www.w3.org/TR/html5/syntax.html#the-end告诉您延迟脚本首先运行:

...
执行文档完成解析时将执行的脚本列表中的第一个脚本.
...

然后DOMContentLoaded事件:

将任务排队以触发一个简单事件,该事件在Document处命名为DOMContentLoaded.

load 总是在两个事件之后发生事件.

  • @PashaTurok:你的列表是`readyState`s的列表,而不是事件.`DOMContentLoaded`在``interactive'和``complete"`之间被触发; 参见"结束"的第1,4和7步. (2认同)