diff --git a/packages/dom/src/index.ts b/packages/dom/src/index.ts index fdd7d84..e8a14ee 100644 --- a/packages/dom/src/index.ts +++ b/packages/dom/src/index.ts @@ -2,5 +2,6 @@ export * from './virtualHistory.js'; export * from './requestIdleCallback.js'; export * from './isBrowser.js'; export * from './localStorageUtils.js'; +export * from './loadScript.js'; export * from './getOuterHeight.js'; export * from './scrollToTopElement.js'; diff --git a/packages/dom/src/loadScript.ts b/packages/dom/src/loadScript.ts new file mode 100644 index 0000000..1f03df9 --- /dev/null +++ b/packages/dom/src/loadScript.ts @@ -0,0 +1,23 @@ +const scripts: { [key: string]: Promise | undefined } = {}; + +/** + * Loads a given script into the page. + * If script was already loaded, it won't load it again + */ +export function loadScript(url: string) { + if (scripts[url]) { + return scripts[url]; + } + + const scriptTag = document.createElement('script'); + + return new Promise((resolve, reject) => { + scriptTag.src = url; + scriptTag.onload = () => resolve(); + scriptTag.onerror = () => { + document.body.removeChild(scriptTag); + reject(); + }; + document.body.appendChild(scriptTag); + }); +}