Window.load事件是否在所有非延迟JavaScript执行完成后触发?
回答
Window.load事件仅保证在同步加载的JavaScript执行完成后触发,对于异步脚本、ES模块这类异步加载的代码,无法保证它们在load事件前执行完毕。
具体细节:
- 同步脚本:包括内联脚本、不带
async/defer属性的外部脚本,浏览器会暂停HTML解析流程,优先完成这类脚本的下载(外部脚本)与执行,它们的执行一定在load事件触发前完成。 - 异步脚本(带
async属性/动态生成脚本):这类脚本会并行下载,下载完成后立即执行,执行时机完全取决于下载速度,可能在load事件前,也可能在之后,浏览器不做顺序保证。 - ES模块:默认是异步加载执行的,不管是内联还是外部模块,都无法确保在
load事件前执行完毕,除非手动配置同步加载(该场景极少使用)。
规范中提到的“文档加载完成”,特指页面所有同步资源(图片、样式表、同步脚本等)加载完成,异步资源的加载与执行不会阻塞load事件的触发。
内容的提问来源于stack exchange,提问作者Arial
相关产品推荐
相关产品推荐

