- 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.
113 lines
3.3 KiB
JavaScript
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;
|
|
}
|
|
});
|