From 28dc81f51f409c7e21de8b559fd5839916a812fd Mon Sep 17 00:00:00 2001 From: Panagiotis Kapros Date: Fri, 11 Oct 2024 14:45:56 +0300 Subject: [PATCH] fix: load the script via src vs inline (#3330) Co-authored-by: pandeymangg --- packages/js/src/lib/load-formbricks.ts | 33 +++++++++++--------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/packages/js/src/lib/load-formbricks.ts b/packages/js/src/lib/load-formbricks.ts index 9c0c9cb96d97..20310cfe171e 100644 --- a/packages/js/src/lib/load-formbricks.ts +++ b/packages/js/src/lib/load-formbricks.ts @@ -10,33 +10,28 @@ let isInitialized = false; // Load the SDK, return the result const loadFormbricksSDK = async (apiHostParam: string): Promise> => { if (!window.formbricks) { - const res = await fetch(`${apiHostParam}/js/formbricks.umd.cjs`); - - // Failed to fetch the app package - if (!res.ok) { - return { ok: false, error: new Error(`Failed to load Formbricks SDK`) }; - } - - const sdkScript = await res.text(); const scriptTag = document.createElement("script"); - scriptTag.innerHTML = sdkScript; - document.head.appendChild(scriptTag); + scriptTag.type = "text/javascript"; + scriptTag.src = `${apiHostParam}/js/formbricks.umd.cjs`; + scriptTag.async = true; const getFormbricks = async (): Promise => new Promise((resolve, reject) => { - const checkInterval = setInterval(() => { - if (window.formbricks) { - clearInterval(checkInterval); - resolve(); - } - }, 100); - - setTimeout(() => { - clearInterval(checkInterval); + const timeoutId = setTimeout(() => { reject(new Error(`Formbricks SDK loading timed out`)); }, 10000); + scriptTag.onload = () => { + clearTimeout(timeoutId); + resolve(); + }; + scriptTag.onerror = () => { + clearTimeout(timeoutId); + reject(new Error(`Failed to load Formbricks SDK`)); + }; }); + document.head.appendChild(scriptTag); + try { await getFormbricks(); return { ok: true, data: undefined };