// Content Script läuft auf der Web-App-Seite // Lauscht auf window.postMessage von der Web-App und leitet an Background weiter const MESSAGE_SOURCE = "eship-webapp"; // Markiere Extension als verfügbar - MEHRFACH versuchen, da Timing variieren kann function setExtensionFlag() { try { const hasChrome = typeof chrome !== 'undefined'; const hasRuntime = hasChrome && chrome.runtime; const runtimeId = hasRuntime ? chrome.runtime.id : null; if (typeof window !== 'undefined' && hasChrome && hasRuntime && runtimeId) { window.__EBAY_EXTENSION__ = true; window.__EBAY_EXTENSION_ID__ = runtimeId; // Extension-ID für chrome.runtime.sendMessage console.log('[ESHIP-CONTENT] window.__EBAY_EXTENSION__ set to true, ID:', runtimeId); return true; } } catch (e) { console.error('[ESHIP-CONTENT] Error setting flag:', e); } return false; } // Versuche Flag sofort zu setzen console.log('[ESHIP-CONTENT] Content script loaded'); if (!setExtensionFlag()) { // Wenn window nicht verfügbar, warte auf DOMContentLoaded oder document.readyState if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { setExtensionFlag(); }); } else { // DOM ist bereits geladen, versuche nochmal setTimeout(() => { setExtensionFlag(); }, 0); } } // Sende Extension-ID an Web-App via postMessage (da Content Script Isolation verhindert, dass window-Properties geteilt werden) // Die Web-App kann dann die Extension-ID in ihrem eigenen Context speichern function sendExtensionIdToWebApp() { try { const runtimeId = chrome.runtime?.id; if (runtimeId) { // Sende Extension-ID an Web-App window.postMessage({ source: "eship-extension", type: "EXTENSION_ID", extensionId: runtimeId }, "*"); } } catch (e) { console.error('[ESHIP-CONTENT] Error sending extension ID:', e); } } // Sende Extension-ID beim Laden sendExtensionIdToWebApp(); // Auch nach kurzer Verzögerung nochmal (falls Web-App noch nicht bereit ist) setTimeout(sendExtensionIdToWebApp, 500); window.addEventListener("message", (event) => { // Sicherheitscheck: Nur Nachrichten von derselben Origin akzeptieren if (event.data?.source !== MESSAGE_SOURCE) return; // Auth Messages (JWT) if (event.data.type === "AUTH_JWT" || event.data.type === "AUTH_CLEARED") { chrome.runtime.sendMessage( { type: event.data.type, jwt: event.data.jwt, }, (response) => { // Antwort zurück an Web-App senden window.postMessage( { source: "eship-extension", type: event.data.type, response: response, }, "*" ); } ); return; } // eBay Parsing Request (PARSE_URL) if (event.data.action === "PARSE_URL" && event.data.url) { chrome.runtime.sendMessage( { action: "PARSE_URL", url: event.data.url, }, (response) => { // Antwort zurück an Web-App senden window.postMessage( { source: "eship-extension", messageId: event.data.messageId, ok: response?.ok, data: response?.data, error: response?.error, }, "*" ); } ); return; } });