(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