fix: Make injectScript wait until script is actually loaded (#1763)

Co-authored-by: Aaron <aaronklinker1@gmail.com>
This commit is contained in:
Johan Kiviniemi
2025-12-16 23:54:41 +02:00
committed by GitHub
parent 6f84d45960
commit adeef6eb73
+26
View File
@@ -32,6 +32,8 @@ export async function injectScript(
script.src = url;
}
const loadedPromise = makeLoadedPromise(script);
await options?.modifyScript?.(script);
(document.head ?? document.documentElement).append(script);
@@ -39,6 +41,30 @@ export async function injectScript(
if (!options?.keepInDom) {
script.remove();
}
await loadedPromise;
}
function makeLoadedPromise(script: HTMLScriptElement): Promise<void> {
return new Promise((resolve, reject) => {
const onload = () => {
resolve();
cleanup();
};
const onerror = () => {
reject(new Error(`Failed to load script: ${script.src}`));
cleanup();
};
const cleanup = () => {
script.removeEventListener('load', onload);
script.removeEventListener('error', onerror);
};
script.addEventListener('load', onload);
script.addEventListener('error', onerror);
});
}
export interface InjectScriptOptions {