javascript - 检查是否已加载异步脚本
问题描述
当页面上的所有脚本都已加载时,我正在尝试执行一个操作。
同步脚本在其 DOM 元素被解析后立即执行。但是异步脚本甚至在脚本开始加载之前和开始执行之前很久就有一个可用的 DOM 元素。我希望能够融入这些脚本元素的生命周期。
我尝试load
在异步脚本上设置一个监听load
器,但如果我在已经执行的脚本上监听它,该事件将不会触发。所以我只需要将它附加到尚未执行的脚本上。但似乎没有属性指示脚本的加载/执行状态。<img>
标签有.complete
并且文档有.readyState
,但似乎脚本没有任何类似的属性。
我以为我可以等待,load
但这window
也意味着等待图像等,当我只对脚本感兴趣时,这似乎很浪费(这意味着我的动作将比我想要的执行得晚得多)。我还查看了文档的就绪状态,但似乎这些状态并不代表异步脚本的执行状态(异步脚本可以在文档变得交互之前或之后执行)。
注意 1:我知道我可以更改脚本本身以在它们执行时调用回调或设置全局,但我不是在寻找这些类型的答案。我正在寻找的是一个通用的解决方案,它可以在不改变脚本本身的情况下工作。
注意 2:另外,想要等待异步脚本的脚本本身也是一个异步脚本。如果不是,我可以将它放在所有异步脚本之前,并load
如上所述附加一个侦听器。但我不想通过加载同步脚本来降低性能,即使它很小。
基本上有以下三种可能的情况:
- 我的脚本在所有其他异步脚本之前运行(在这种情况下,
load
侦听器可以工作)。 - 我的脚本在其他异步脚本之间执行(在这种情况下,我必须知道哪些已经执行,哪些尚未执行)。
- 我的脚本最后执行(在这种情况下我不需要等待任何东西)。
我可以以牺牲性能为代价强制方案 1(通过使我的脚本同步并将其放在所有其他脚本之前)或方案 3(通过等待窗口load
事件),但我似乎无法解决方案 2 的问题,即一般情况。
解决方案
推荐阅读
- python - 热方程 - 设置和绘图
- xamarin.forms - 如何从 xamarin 表单将多个对象发布到 webapi
- c# - 违反 PRIMARY KEY 约束“PK_EMPLOYEE”。无法在对象中插入重复键
- javascript - 为什么我更新的对象没有出现在状态中?
- c# - 为什么要在 C# 中定义一个本地函数只是为了立即调用它(在 IEnumerable 的上下文中
) - c# - Azure 函数 - 持久函数,SetCustomStatus 未更新
- spring - spring security 中的 hasRole() 无法正常工作
- android - 在 Android Studio 上导入模块
- python - Python 新手 - 打印功能问题
- javascript - 该网站如何在没有任何权限的情况下控制用户在选项卡之间的导航?