(function() { 'use strict'; console.log('SUPERPET: Inicializando sistema de cross-domain tracking...'); // 1. Configuración de gtag si no está disponible if (typeof gtag === 'undefined') { window.dataLayer = window.dataLayer || []; window.gtag = function(){dataLayer.push(arguments);}; console.log('SUPERPET: Configuración manual de gtag completada'); } // 2. Configuración cross-domain para GA4 SuperPet gtag('config', 'G-8Q27VEP2CW', { linker: { domains: ['mascotasegura.mapfre.com.pe'] }, cookie_domain: 'auto', send_page_view: true }); // 3. Configuración GA4 de Mapfre para transmisión dual de eventos gtag('config', 'G-GBQENH1BJY', { linker: { domains: ['mascotasegura.mapfre.com.pe'] }, cookie_domain: 'auto', send_page_view: false }); // 4. Función para obtener parámetros UTM del sitio padre function getParentUtmParams() { const urlParams = new URLSearchParams(window.location.search); const utmParams = {}; // Obtener UTM de la URL actual const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; utmKeys.forEach(key => { const value = urlParams.get(key); if (value) { utmParams[key] = value; } }); // Si no hay UTM en la URL, intentar obtener de sessionStorage o cookies if (Object.keys(utmParams).length === 0) { try { const storedUtm = sessionStorage.getItem('original_utm_params'); if (storedUtm) { const parsedUtm = JSON.parse(storedUtm); Object.assign(utmParams, parsedUtm); } } catch (e) { console.log('SUPERPET: No se pudieron recuperar UTM almacenados'); } } else { // Guardar UTM actuales en sessionStorage para futuras páginas try { sessionStorage.setItem('original_utm_params', JSON.stringify(utmParams)); } catch (e) { console.log('SUPERPET: No se pudieron guardar UTM en sessionStorage'); } } return utmParams; } // 5. Función para obtener referrer como fallback function getFallbackSource() { const referrer = document.referrer; if (referrer) { try { const referrerHost = new URL(referrer).hostname; return { utm_source: referrerHost, utm_medium: 'referral' }; } catch (e) { return {}; } } return {}; } // 6. Listener para eventos del iframe - Sistema de envío dual window.addEventListener('message', function(event) { if (event.origin !== 'https://mascotasegura.mapfre.com.pe') { return; } if (event.data.type === 'iframe_datalayer_event') { const eventData = event.data.event; const parentUtm = getParentUtmParams(); console.log('SUPERPET: Evento del iframe interceptado -', eventData.event); // Transmisión a GA4 SuperPet (sitio padre) gtag('event', eventData.event, { send_to: 'G-8Q27VEP2CW', event_category: eventData.category || 'mapfre_iframe', event_label: eventData.label || eventData.action || 'mapfre_interaction', custom_parameter_1: 'from_mapfre_iframe', custom_parameter_2: eventData.action, source: 'mapfre_cross_domain', // Agregar UTM del padre a los eventos original_source: parentUtm.utm_source || 'direct', original_medium: parentUtm.utm_medium || 'none', original_campaign: parentUtm.utm_campaign || '(not set)', ...eventData }); // Transmisión simultánea a GA4 de Mapfre gtag('event', eventData.event, { send_to: 'G-GBQENH1BJY', event_category: eventData.category || 'mapfre_insurance', event_label: eventData.label || eventData.action || 'iframe_event', custom_parameter_1: 'from_parent_site', custom_parameter_2: eventData.action, source: 'superpet_cross_domain', // Agregar UTM del padre a los eventos original_source: parentUtm.utm_source || 'direct', original_medium: parentUtm.utm_medium || 'none', original_campaign: parentUtm.utm_campaign || '(not set)', ...eventData }); console.log('SUPERPET: ✅ Evento transmitido a ambas instancias GA4 con UTM del padre -', eventData.event); } }); // 7. Actualización de URL del iframe con parámetros de tracking del padre function enhanceIframeUrl() { const iframe = document.getElementById('iframeMapfre'); if (!iframe) { console.log('SUPERPET: WARNING - Iframe no localizado con ID: iframeMapfre'); return; } const gaCookie = document.cookie.match(/_ga=([^;]+)/); const parentUtm = getParentUtmParams(); const fallbackUtm = getFallbackSource(); // Combinar UTM del padre con fallbacks const finalUtm = { ...fallbackUtm, ...parentUtm }; const currentSrc = iframe.src; const url = new URL(currentSrc); // Agregar Client ID de GA4 if (gaCookie) { url.searchParams.set('_ga', gaCookie[1]); } // Agregar parámetros UTM del padre (o fallbacks) if (finalUtm.utm_source) { url.searchParams.set('utm_source', finalUtm.utm_source); } else { url.searchParams.set('utm_source', window.location.hostname); } if (finalUtm.utm_medium) { url.searchParams.set('utm_medium', finalUtm.utm_medium); } else { url.searchParams.set('utm_medium', 'iframe'); } if (finalUtm.utm_campaign) { url.searchParams.set('utm_campaign', finalUtm.utm_campaign); } else { url.searchParams.set('utm_campaign', 'mapfre_insurance'); } // Agregar UTM adicionales si existen if (finalUtm.utm_term) { url.searchParams.set('utm_term', finalUtm.utm_term); } if (finalUtm.utm_content) { url.searchParams.set('utm_content', finalUtm.utm_content); } // Parámetros adicionales url.searchParams.set('cross_domain', 'true'); url.searchParams.set('parent_hostname', window.location.hostname); iframe.src = url.toString(); console.log('SUPERPET: ✅ URL del iframe actualizada con UTM del padre:', finalUtm); if (gaCookie) { console.log('SUPERPET: ✅ Client ID agregado:', gaCookie[1]); } } // 8. Ejecución al completar carga del DOM if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { setTimeout(enhanceIframeUrl, 1000); }); } else { setTimeout(enhanceIframeUrl, 1000); } console.log('SUPERPET: ✅ Sistema de cross-domain tracking con migración UTM configurado correctamente'); })();