export default class APILoader {
constructor(props) {
this.apiURL = props;
this.scriptId = encodeURIComponent(props).replace(/[.|:|%|h|t|p|s]/g, '');
}
buildScriptTag() {
const prevScript = document.getElementById(this.scriptId);
if (prevScript) {
return prevScript;
}
const script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.defer = true;
script.id = this.scriptId;
script.src = this.apiURL;
return script;
}
getMainPromise() {
const script = this.buildScriptTag();
const p = new Promise((resolve) => {
script.onload = () => {
resolve({
code: 200,
id: this.scriptId,
src: this.apiURL,
});
};
});
document.body.appendChild(script);
return p;
}
load(data = {}) {
const { mainObj } = data;
this.mainObj = mainObj;
if (mainObj) {
return new Promise((resolve) => {
resolve(mainObj);
});
}
return this.getMainPromise();
}
}
使用:
new APILoader("https://www.XXXXXX")
.load({ mainObj: window })
.then((obj) => {
console.log(obj);
});