首页 > 解决方案 > 检查是否已加载异步脚本

问题描述

当页面上的所有脚本都已加载时,我正在尝试执行一个操作。

同步脚本在其 DOM 元素被解析后立即执行。但是异步脚本甚至在脚本开始加载之前和开始执行之前很久就有一个可用的 DOM 元素。我希望能够融入这些脚本元素的生命周期。

我尝试load在异步脚本上设置一个监听load器,但如果我在已经执行的脚本上监听它,该事件将不会触发。所以我只需要将它附加到尚未执行的脚本上。但似乎没有属性指示脚本的加载/执行状态。<img>标签有.complete并且文档有.readyState,但似乎脚本没有任何类似的属性。

我以为我可以等待,load但这window也意味着等待图像等,当我只对脚本感兴趣时,这似乎很浪费(这意味着我的动作将比我想要的执行得晚得多)。我还查看了文档的就绪状态,但似乎这些状态并不代表异步脚本的执行状态(异步脚本可以在文档变得交互之前或之后执行)。

注意 1:我知道我可以更改脚本本身以在它们执行时调用回调或设置全局,但我不是在寻找这些类型的答案。我正在寻找的是一个通用的解决方案,它可以在不改变脚本本身的情况下工作。

注意 2:另外,想要等待异步脚本的脚本本身也是一个异步脚本。如果不是,我可以将它放在所有异步脚本之前,并load如上所述附加一个侦听器。但我不想通过加载同步脚本来降低性能,即使它很小。

基本上有以下三种可能的情况:

  1. 我的脚本在所有其他异步脚本之前运行(在这种情况下,load侦听器可以工作)。
  2. 我的脚本在其他异步脚本之间执行(在这种情况下,我必须知道哪些已经执行,哪些尚未执行)。
  3. 我的脚本最后执行(在这种情况下我不需要等待任何东西)。

我可以以牺牲性能为代价强制方案 1(通过使我的脚本同步并将其放在所有其他脚本之前)或方案 3(通过等待窗口load事​​件),但我似乎无法解决方案 2 的问题,即一般情况。

标签: javascriptdom

解决方案


推荐阅读