Files
eship/Extension/content-script.js
Kenso Grimm ed9a75a1dc Add product scanning functionality to eBay extension
- Introduced a new scanProductsForAccount feature in the background script to handle product scanning requests.
- Implemented a timeout mechanism for scan requests to enhance reliability.
- Updated content scripts to parse product lists and extract relevant data from eBay storefronts.
- Enhanced error handling and logging for better debugging and user feedback.
- Added methods to extract items sold and shop names from eBay profiles.
2026-01-18 14:19:42 +01:00

113 lines
3.3 KiB
JavaScript

// 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;
}
});