function getUrlParams() { let queryString = window.location.search; queryString = queryString?.split("?").join("&"); const params = new URLSearchParams(queryString); const queryParams = {}; params.forEach((value, key) => { queryParams[key] = value; }); return queryParams; } function appendParamsToUrl(url, pixel) { try { const storedParams = JSON.parse(sessionStorage.getItem("urlParams")) || {}; const mappings = {"subid2":"gclid","subid":"pixel","subid3":"device","subid4":"matchtype","subid5":"keyword"}; const urlObj = new URL(url); if (storedParams.gclid) { urlObj.searchParams.set("gclid", storedParams.gclid); } Object.entries(mappings).forEach(([platformParam, googleParam]) => { if (googleParam === "pixel") { urlObj.searchParams.set(platformParam, pixel); } else if (storedParams[platformParam]) { let value = storedParams[platformParam]; if (value.includes("{" + googleParam + "}")) { value = value.replace( "{" + googleParam + "}", storedParams[googleParam] || "" ); } urlObj.searchParams.set(platformParam, value); } else if (storedParams[googleParam]) { urlObj.searchParams.set(platformParam, storedParams[googleParam]); } }); const result = urlObj.toString(); return result; } catch (error) { console.warn("[CONVERSIONS-TRACKER]: Invalid outbound URL skipped:", url, error); return null; } } function updateAllUrls(pixel) { const elements = document.querySelectorAll("a, button, form"); elements.forEach((element) => { let url = element.getAttribute("href") || element.getAttribute("action"); if (url && (url.startsWith("http://") || url.startsWith("https://"))) { const updatedUrl = appendParamsToUrl(url, pixel); if (!updatedUrl) return; if ( element.tagName.toLowerCase() === "a" || element.tagName.toLowerCase() === "button" ) { element.setAttribute("href", updatedUrl); } if (element.tagName.toLowerCase() === "form") { element.setAttribute("action", updatedUrl); } } }); } function getValidOutboundUrl(outboundUrls) { if (!outboundUrls.length) return null; const currentDomainPath = window.location.pathname; const externalUrls = outboundUrls.filter((url) => { try { const parsedUrl = new URL(url); const pathname = parsedUrl.pathname; return ( pathname === "" || pathname === "?" || pathname === "/" || pathname !== currentDomainPath ); } catch (e) { return false; } }); return externalUrls.length ? externalUrls[externalUrls.length - 1] : null; } function initTracking() { const params = getUrlParams(); sessionStorage.setItem("urlParams", JSON.stringify(params)); updateAllUrls("MILION"); const observer = new MutationObserver(() => updateAllUrls("MILION") ); observer.observe(document.body, { childList: true, subtree: true }); } window.__clickfastAppendParamsToUrl = function(url) { return appendParamsToUrl(url, "MILION") || url; }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initTracking); } else { initTracking(); }