dynamic-loading-script
Version:
Dynamic script loading.
58 lines • 1.81 kB
JavaScript
// index.ts
function dynamic_loading_script_default(url, option) {
return new Promise((resolve, reject) => {
const { variableName, timeout, callback, jsonpCallbackName } = option;
let timer;
let script;
if (typeof url === "string") {
if (!variableName) {
reject(new Error("variableName\u4E0D\u80FD\u4E3A\u7A7A"));
return;
}
if (window[variableName]) {
callback && callback(window[variableName]);
resolve(window[variableName]);
return;
}
if (jsonpCallbackName) {
window[jsonpCallbackName] = () => {
resolve(window[variableName]);
delete window[jsonpCallbackName];
timer && clearTimeout(timer);
callback && callback(window[variableName]);
};
}
if (timeout !== false) {
timer = window.setTimeout(() => {
if (!window[variableName]) {
script.onload = null;
script.onerror = null;
document.body.removeChild(script);
reject(new Error("\u52A0\u8F7D\u8D85\u65F6"));
}
}, timeout || 1e4);
}
script = document.createElement("script");
script.src = url;
script.type = "text/javascript";
script.onload = () => {
if (jsonpCallbackName)
return;
timer && clearTimeout(timer);
callback && callback(window[variableName]);
resolve(window[variableName]);
};
script.onerror = () => {
timer && clearTimeout(timer);
reject(new Error("\u52A0\u8F7D\u5931\u8D25"));
};
document.head.appendChild(script);
} else {
throw new Error("url\u7C7B\u578B\u4E0D\u6B63\u786E");
}
});
}
export {
dynamic_loading_script_default as default
};
//# sourceMappingURL=index.mjs.map