窗口和DOM加载

时间:2019-03-16 08:00:26

标签: javascript jquery

是否总是会在DOMContentLoaded事件之前触发window.onload事件,因为大多数网页都带有图像和样式表,还是可以用其他方式发生?我需要知道window.onload事件之后是否总是发生DOMContentLoaded,如果网页没有任何样式表,图像和子帧会发生什么情况?

据说只有在DOM完成加载后,窗口才会加载。

这句话是真的吗?

2 个答案:

答案 0 :(得分:2)

WHATWG发布的HTML living standard指定了解析DOM时发生的操作顺序。它有12个步骤。步骤4和7处理您询问的事件:

  

4)对任务进行排队以运行以下子步骤:

     
      
  1. 在Document对象上触发一个名为DOMContentLoaded的事件,其气泡属性初始化为true。

  2.   
  3. 启用ServiceWorkerContainer对象的客户端消息队列,该对象的关联的Service Worker客户端是Document对象的相关设置对象。

  4.   
     

5)旋转事件循环,直到将尽快执行的脚本集和将尽快执行的脚本列表为空。

     

6)旋转事件循环,直到没有任何延迟文档中加载事件的事件为止。

     

7)将任务排队以运行以下子步骤:

     
      
  1. 将当前文档准备状态设置为“完成”。

  2.   
  3. 加载事件:如果Document对象的浏览上下文为非null,则在Document对象的相关全局对象上触发一个名为load的事件,并设置旧目标覆盖标志。

    < / li>   

由于确保已排队的任务按其排队的顺序运行,因此可以确保这两个事件的顺序。

实际上,在将DOMContentedLoaded添加到队列之前,第5步和第6步已经处理了load事件(“旋转事件循环”)。

答案 1 :(得分:1)

更新:有关详细说明,请参见trincot's answer-简而言之, 指定DOMContentLoaded将始终在{ {1}}。

它既不指定也不保证̶load̶̶_̶a̶l̶w̶a̶y̶s̶_̶闪光后̶̶l̶o̶a̶d̶̶,̶但它是一个合理的假设做出。为了完成整个页面的加载,浏览器需要首先完全加载DOM,并且即使在没有资源等待加载的情况下,也肯定会在触发̶D̶O̶M̶C̶o̶n̶t̶e̶n̶t̶L̶o̶a̶d̶e̶d̶之前触发DOMContentLoaded

来自MDN

  

load 事件在完全加载和解析了初始HTML文档时触发,而无需等待样式表,图像和子帧完成加载。

     

另一个事件DOMContentLoaded仅应用于检测页面已满。