【问题标题】:Window.onload vs script deferWindow.onload 与脚本延迟
【发布时间】:2014-12-04 17:19:45
【问题描述】:

Here 据说,html 文档有 4 个 readyState 可能的值:

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

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

之后

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

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    继续阅读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 事件总是在这两个之后触发。

    【讨论】:

    • 感谢您的详细解答。您能解释一下为什么 DOMContentLoaded 事件不在我的列表中吗?
    • @PashaTurok:您的列表是readyStates 的列表,而不是事件。 DOMContentLoaded"interactive""complete" 之间触发;参见“The end”的第 1、4 和 7 步。
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多