vue页面,引入第三方js
需要在加载完远程js后执行初始化操作。
// 取出Promise中的resolve方法,在sdk onload方法中调用 let isLoad; const loadPromise = new Promise((resolve, reject) => { isLoad = resolve; }); // 创建script标签,添加到body const sdk = document.createElement(\'script\'); sdk.type = \'text/javascript\'; sdk.src = \'https://www.xxx.com/sdk.js\'; sdk.onload = () => { isLoad(); }; document.body.appendChild(sdk); // vue 代码 export default { mounted() { loadPromise.then(() => { console.log(\'sdk加载完成\'); // do something }); } };
更新:封装了动态加载js方法,加载多个js方法
// 动态加载js function dynamicLoadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement(\'script\'); script.src = src; script.onload = function () { resolve(src); }; script.onerror = function () { reject(new Error(\'Failed to load \' + src), script); }; document.body.appendChild(script); }); } // 动态加载多条js function loadScripts(urls) { return Promise.all(urls.map((url) => dynamicLoadScript(url))); } const hasLoad = new Promise((resolve) => { loadScripts([ \'https:/xxx.js\', \'https:/xxx.js\', \'https:/xxx.js\', ]).then(() => { resolve(); }); }); export default { name: \'component\', data() { return {}; }, beforeCreate() { }, mounted() { hasLoad.then(() => { console.log(\'加载完成\'); // do something }); } };