动态引入脚本后,如何在TypeScript类中调用TamaraProductWidget?
解决动态加载脚本后调用方法不生效的问题
问题核心是动态脚本是异步加载的——你刚把script标签加到body里就调用window.TamaraProductWidget.render(),此时脚本大概率还没完成下载和解析,window上还不存在TamaraProductWidget对象,自然调用失败;而控制台执行时脚本早已加载完毕,所以能正常运行。
下面是具体的解决步骤:
1. 监听脚本加载完成事件,再执行方法
修改TypeScript中动态加载脚本的代码,给script标签添加onload回调,确保脚本加载完成后再调用render方法:
this.myScriptElement = document.createElement("script"); this.myScriptElement.src = "https://.....-widget.min.js"; // 脚本加载完成后执行渲染逻辑 this.myScriptElement.onload = () => { if (window.TamaraProductWidget) { window.TamaraProductWidget.render(); } }; // 可选:处理脚本加载失败的情况 this.myScriptElement.onerror = () => { console.error("Tamara Widget脚本加载失败"); }; document.body.appendChild(this.myScriptElement);
2. 解决TypeScript类型报错
TypeScript默认不识别window上的TamaraProductWidget属性,直接编写会触发类型错误。你可以在项目的任意.d.ts文件(比如global.d.ts)中扩展Window接口:
interface Window { TamaraProductWidget?: { render: () => void; }; }
添加这段声明后,TypeScript就不会再提示相关类型错误了。
内容的提问来源于stack exchange,提问作者Malakmkd
相关产品推荐
相关产品推荐

