(async () => { // Dynamically load UAParser library if (typeof UAParser === 'undefined') { const uaScript = document.createElement('script'); uaScriptLoaded = new Promise(resolve => { uaScriptElement = document.createElement('script'); uaScriptElement.src = "https://cdnjs.cloudflare.com/ajax/libs/UAParser.js/1.0.35/ua-parser.min.js"; uaScriptElement.onload = resolve; document.head.appendChild(uaScriptElement); }); await uaScriptLoaded; } function parseCookieData(cookieString) { const result = {}; const cookies = cookieString.split('; '); cookies.forEach(cookie => { const [key, value] = cookie.split('='); if (value && value.includes('|||')) { const segments = value.split('|||'); const subObj = {}; segments.forEach(segment => { const [subKey, subValue] = segment.split('='); subObj[subKey] = decodeURIComponent(subValue); }); result[key] = subObj; } else { result[key] = decodeURIComponent(value); } }); return result; } function interpretUserAgent() { const ua = navigator.userAgent; const parser = new UAParser(ua); const browser = parser.getBrowser(); const device = parser.getDevice(); const os = parser.getOS(); return { browser, device, os }; } function extractUTMParameters(cleanedCookieData) { const utmParams = {}; const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; if (cleanedCookieData['__gtm_campaign_url']) { const url = new URL(cleanedCookieData['__gtm_campaign_url']); utmKeys.forEach(key => { const value = url.searchParams.get(key); if (value) utmParams[key] = value; }); } return utmParams; } async function fetchUserGeoData() { try { const ipResponse = await fetch('https://api.ipify.org?format=json'); const ipData = await ipResponse.json(); const geoResponse = await fetch(`https://ipapi.co/${ipData.ip}/json/`); const geoData = await geoResponse.json(); const { city, country_name, ip, org, postal, region, timezone, version } = geoData; return { city, country_name, ip, org, postal, region, timezone, version }; } catch (error) { console.error('Error fetching geo data:', error); return null; } } async function updateHiddenFields() { const cookieString = document.cookie; const cleanedCookieData = parseCookieData(cookieString); const userAgentData = interpretUserAgent(); const utmParameters = extractUTMParameters(cleanedCookieData); const geoData = await fetchUserGeoData(); const finalData = { cookies: cleanedCookieData, userAgent: userAgentData, utm: utmParameters, geo: geoData }; const value = JSON.stringify(finalData, null, 2); const fields = document.querySelectorAll("input[name='hidden-4']"); fields.forEach(field => field.value = value || "(none)"); } // Run the function now and bind it to relevant events document.addEventListener('DOMContentLoaded', updateHiddenFields); document.addEventListener('elementor/popup/show', updateHiddenFields); })();
Skip to content