tracking-proxy-helper/inject-listener.js
Andi Petzoldt 1c1479b239 Tracking Proxy Helper v1.1
- added Session ID to Popup
- added Channels to Popup
2024-07-31 16:49:16 +02:00

118 lines
3.9 KiB
JavaScript

// inject-listener.js
// Konsolen-Ausgaben für Debugging aktivieren oder deaktivieren
const debugEnabled = true;
const debugLog = (...args) => {
if (debugEnabled) {
console.log(...args);
}
};
debugLog('Injected listener loaded');
// Funktion, um Nachrichten an das globale Fenster zu senden
function sendTPmsg(o) {
window.postMessage(o, '*');
}
// Funktion, um __tpt-Details zu extrahieren und zurückzugeben
function getTPDetails() {
return window.__tpt ? JSON.parse(JSON.stringify(window.__tpt)) : {};
}
// Überprüfung des __tpt Objekts und Versendung des Ergebnisses
function checkTPT(obj) {
if (typeof obj!='string') return;
if (window.__tpt && typeof window.__tpt.cha_str!='string') { window.__tpt.cha_str = ''; }
const tpDetails = getTPDetails();
if (tpDetails.cha) {
if (JSON.stringify(tpDetails.cha)!=tpDetails.cha_str) {
sendTPmsg({ type: 'CHECK_TPT_RESULT', chaChanged:true, tpobj: tpDetails });
window.__tpt.cha_str = JSON.stringify(tpDetails.cha);
}
}
if (obj=='cid' || obj=='fip') {
sendTPmsg({ type: 'CHECK_TPT_RESULT', hasTPT: !!tpDetails.cid, hasSessID: !!tpDetails.fip, tpobj: tpDetails });
}
}
// Proxy Handler zur Überwachung von Änderungen
const handler = {
set(target, property, value) {
target[property] = value;
debugLog(`Property ${property} changed to`, value);
checkTPT(property);
return true;
},
get(target, property) {
return target[property];
}
};
// Initialisierung des Proxies für das __tpt Objekt
if (window.__tpt) {
window.__tpt = new Proxy(window.__tpt, handler);
} else {
Object.defineProperty(window, '__tpt', {
set(value) {
if (value && typeof value === 'object') {
value = new Proxy(value, handler);
}
Object.defineProperty(this, '__tpt', { value, writable: true, configurable: true, enumerable: true });
checkTPT('__tpt');
},
configurable: true,
enumerable: true
});
}
window.addEventListener('message', function(event) {
if (!event.data || !event.data.type || !event.data.details) return;
//console.log('TRACKING_PROXY_REQUEST message 1', event.data);
if (event.data.type === 'TRACKING_PROXY_REDIRECT') {
//console.log('TRACKING_PROXY_REQUEST message 2', event);
const eventData = event.data.details.eventData;
const metaData = event.data.details.metaData;
if (eventData.cid && eventData.fip && window.__tpt && eventData.cid === window.__tpt.cid) {
//console.log('Tracking Proxy Event detected:', event);
window.postMessage({ type: 'TRACKING_PROXY_RESPONSE', details: { eventData:eventData, metaData:metaData } }, '*');
} else {
//console.log('No matching cid found in request body', details);
}
}
}, false);
// Timeout zum Beenden des Listeners, wenn __tpt nicht innerhalb von 10 Sekunden erscheint
setTimeout(() => {
if (!window.__tpt || !window.__tpt.cid) {
debugLog('Kein __tpt Objekt gefunden oder keine CID nach 10 Sekunden.');
window.removeEventListener('message', this);
}
}, 10000);
/*
(function() {
let tpid = '';
//console.log("inject.js loaded");
function checkTPT('1') {
if (!window.__tpt) return;
let tpobj = JSON.parse(JSON.stringify(window.__tpt));
console.log('checkTPT result:', tpobj);
if (!tpobj.cid) return;
window.postMessage({ type: 'CHECK_TPT_RESULT', tpobj:tpobj }, '*');
}
// Überprüfe sofort
checkTPT('2');
// Wiederhole die Überprüfung nach einer kurzen Verzögerung, um sicherzustellen, dass das Objekt geladen ist
const observer = new MutationObserver((mutations, observer) => {
if (window.__tpt && window.__tpt.cid) {
//console.log('TP is now available');
checkTPT('3');
observer.disconnect();
}
});
// Starten des MutationObserver
if (!window.__tpt && !window.__tpt.cid) observer.observe(document.documentElement, { childList: true, subtree: true });
//console.log('injected listener executed');
})();
*/