是否总是会在DOMContentLoaded
事件之前触发window.onload
事件,因为大多数网页都带有图像和样式表,还是可以用其他方式发生?我需要知道window.onload
事件之后是否总是发生DOMContentLoaded
,如果网页没有任何样式表,图像和子帧会发生什么情况?
据说只有在DOM完成加载后,窗口才会加载。
这句话是真的吗?
答案 0 :(得分:2)
WHATWG发布的HTML living standard指定了解析DOM时发生的操作顺序。它有12个步骤。步骤4和7处理您询问的事件:
4)对任务进行排队以运行以下子步骤:
在Document对象上触发一个名为
DOMContentLoaded
的事件,其气泡属性初始化为true。启用ServiceWorkerContainer对象的客户端消息队列,该对象的关联的Service Worker客户端是Document对象的相关设置对象。
5)旋转事件循环,直到将尽快执行的脚本集和将尽快执行的脚本列表为空。
6)旋转事件循环,直到没有任何延迟文档中加载事件的事件为止。
7)将任务排队以运行以下子步骤:
将当前文档准备状态设置为“完成”。
加载事件:如果Document对象的浏览上下文为非null,则在Document对象的相关全局对象上触发一个名为
< / li>load
的事件,并设置旧目标覆盖标志。
由于确保已排队的任务按其排队的顺序运行,因此可以确保这两个事件的顺序。
实际上,在将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
仅应用于检测页面已满。