/** * Traffic Audit Script v2.5 (Classic Stable) * Focado em capturar dados do Taboola sem falhas. */ (function() { const WORKER_URL = 'https://traffic-audit-worker.adrianoterresrosa.workers.dev'; const SESSION_ID = 'sess_' + Date.now() + '_' + Math.random().toString(36).substr(2, 5); const START_TIME = Date.now(); function getParams() { const p = new URLSearchParams(window.location.search); return { utm_source: p.get('utm_source'), utm_campaign: p.get('utm_campaign'), utm_term: p.get('utm_term'), // ID do Site tb_site: p.get('tb_site'), // Nome do Site tb_domain: p.get('tb_domain'), tb_platform: p.get('tb_platform') }; } function sendData(trigger) { const timeSpent = Date.now() - START_TIME; const params = getParams(); const payload = { session_id: SESSION_ID, utm_params: params, // Formato legado // Campos diretos utm_source: params.utm_source, utm_term: params.utm_term, tb_site: params.tb_site, tb_domain: params.tb_domain, dwell_time_ms: timeSpent, is_accidental_click: timeSpent < 2000, trigger: trigger // 'load' ou 'unload' }; // Tenta Beacon na saída, Fetch na entrada if (trigger === 'unload' && navigator.sendBeacon) { const blob = new Blob([JSON.stringify(payload)], { type: 'application/json' }); navigator.sendBeacon(WORKER_URL, blob); } else { fetch(WORKER_URL, { method: 'POST', body: JSON.stringify(payload), keepalive: true, headers: { 'Content-Type': 'application/json' } }).catch(e => console.error(e)); } } // 1. Dispara na Entrada (Garante o registro do site/utm) sendData('load'); // 2. Dispara na Saída (Tenta registrar o tempo) document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') sendData('unload'); }); })();