34 lines
883 B
JavaScript
34 lines
883 B
JavaScript
export const loadScript = (src) =>
|
|
new Promise((resolve, reject) => {
|
|
const existing = document.querySelector(`script[src="${src}"]`);
|
|
|
|
if (existing) {
|
|
if (existing.dataset.loaded === "true") {
|
|
resolve();
|
|
return;
|
|
}
|
|
|
|
existing.addEventListener("load", () => resolve(), { once: true });
|
|
existing.addEventListener("error", () => reject(new Error(`Failed to load ${src}`)), {
|
|
once: true
|
|
});
|
|
return;
|
|
}
|
|
|
|
const script = document.createElement("script");
|
|
script.src = src;
|
|
script.async = true;
|
|
script.addEventListener(
|
|
"load",
|
|
() => {
|
|
script.dataset.loaded = "true";
|
|
resolve();
|
|
},
|
|
{ once: true }
|
|
);
|
|
script.addEventListener("error", () => reject(new Error(`Failed to load ${src}`)), {
|
|
once: true
|
|
});
|
|
document.head.appendChild(script);
|
|
});
|