You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测脚本是否已完全加载并执行?

检测脚本any-script.js是否完全加载并执行的方案

针对脚本加载状态检测的问题,没有单一浏览器API能直接覆盖所有场景,但可以通过以下几种方法组合解决:

1. 利用脚本元素readyState属性结合load事件

脚本加载完成后,其readyState属性会变为"loaded"或"complete"。可以先判断这个状态,再决定是否添加事件监听器:

function handleScriptLoaded() {
  // 这里编写脚本加载完成后的逻辑
  console.log('any-script.js已加载并执行');
}

// 查找DOM中已存在的目标脚本
const existingScript = document.querySelector('script[src="any-script.js"]');

if (existingScript) {
  // 检查脚本是否已加载完成
  if (existingScript.readyState === 'loaded' || existingScript.readyState === 'complete') {
    handleScriptLoaded();
  } else {
    // 脚本仍在加载中,添加load事件监听
    existingScript.addEventListener('load', handleScriptLoaded);
  }
} else {
  // DOM中无该脚本,动态加载并监听load事件
  const newScript = document.createElement('script');
  newScript.src = 'any-script.js';
  newScript.addEventListener('load', handleScriptLoaded);
  document.body.appendChild(newScript);
}

2. 约定全局标识(适用于可修改目标脚本的场景)

如果能控制any-script.js的内容,可在脚本末尾添加全局变量作为加载完成标记,再通过轮询检测该变量:

// 在any-script.js的末尾添加:
window.anyScriptIsReady = true;

// 检测逻辑:
function checkScriptReady() {
  if (window.anyScriptIsReady) {
    handleScriptLoaded();
  } else {
    // 每隔100ms轮询一次,直到检测到标记
    setTimeout(checkScriptReady, 100);
  }
}

checkScriptReady();

若无法修改目标脚本,此方法不适用,但在抽象回调场景中,这种约定式方案可靠性较高。

3. 结合文档就绪状态(针对同步嵌入脚本)

如果脚本是同步嵌入HTML的(无async/defer属性),当document.readyState变为"interactive"或"complete"时,同步脚本已执行完成。但对于async/defer脚本,仍需结合前两种方法判断。


内容的提问来源于stack exchange,提问作者Profesor08

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:55:41