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

Chrome/Edge中脚本加载后执行函数失效,Firefox运行正常如何解决?

问题修复方案

根因分析

  • 当前脚本加载逻辑没有严格控制依赖顺序:popup-withdadobeancode.js依赖createJS提供的cjs对象,现有逻辑没有保证createJS加载完成后再加载执行popup-withdadobeancode.js
  • Chrome 中动态创建的script标签默认async = true,脚本加载完成后会立即执行,不按插入顺序触发,导致执行时序和Firefox不一致,出现依赖对象找不到的报错

修复方案

调整脚本加载逻辑,强制按依赖顺序加载,禁用动态脚本的异步加载特性,修改后的核心代码如下:

<script>
var canvas, stage, exportRoot, anim_container, dom_overlay_container, fnStartAnimation;
function initSol() {
    canvas = document.getElementById("canvas");
    anim_container = document.getElementById("animation_container");
    dom_overlay_container = document.getElementById("dom_overlay_container");
    var comp=AdobeAn.getComposition("XXXXXX");
    var lib=comp.getLibrary();
    var loader = new createjs.LoadQueue(false);
    loader.addEventListener("fileload", function(evt){handleFileLoad(evt,comp)});
    loader.addEventListener("complete", function(evt){handleComplete(evt,comp)});
    var lib=comp.getLibrary();
    loader.loadManifest(lib.properties.manifest);
}
function handleFileLoad(evt, comp) {
    //some stuff    
}
function handleComplete(evt,comp) {
    //some stuff
}
function loadJs(src) {
  return new Promise(function(resolve, reject) {
    let scrp = document.createElement('script');
    scrp.src = src;
    // 核心修复:禁用异步加载,保证脚本按插入顺序执行
    scrp.async = false;
    scrp.onload = () => resolve(scrp);
    scrp.onerror = (err) => reject(new Error(`脚本加载失败: ${src}, 错误信息: ${err.message}`));
    document.body.append(scrp);
  });
}
// 按依赖顺序加载:先加载createJS,完成后再加载客户侧脚本,全部加载完成后执行业务逻辑
loadJs("https://code.createjs.com/createjs-2015.11.26.min.js")
.then(() => loadJs("https://www.customerweb.com/resources/popup-withdadobeancode.js?12345678"))
.then(() => initSol())
.catch(err => {
    // 可自定义加载失败兜底逻辑
    console.error(err);
});
var urlCheck = "check"; 
var urlClose = "close";
</script>
<div id="animation_container" style="background-color:rgba(255, 255, 255, 0.00); width:910px; height:512px">
    <canvas id="canvas" width="910" height="512" style="position: absolute; display: block; background-color:rgba(255, 255, 255, 0.00);"></canvas>
    <div id="dom_overlay_container" style="pointer-events:none; overflow:hidden; width:910px; height:512px; position: absolute; left: 0px; top: 0px; display: block;">
    </div>
</div>

修复说明

  • 删除了原来静态引入的createJS脚本,统一用loadJs方法加载,方便控制顺序
  • 给动态创建的script标签设置async=false,让Chrome按插入顺序执行脚本,对齐Firefox的执行逻辑
  • 链式调用Promise保证加载顺序:createJS加载完成 → 客户侧popup-withdadobeancode.js加载完成 → 执行initSol业务逻辑
  • 新增错误捕获逻辑,避免加载失败时抛出未捕获异常,可自行扩展重试、兜底展示等逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:18:03