// background.js — Service worker (Manifest V3) // // Quand l'utilisateur clique sur l'icône de l'extension : // 1. On vérifie qu'il est bien sur itsma.vd.ch // 2. On injecte un script dans l'onglet qui récupère le HTML complet // de la page + tous les liens vers les fiches d'intervention // 3. On stocke ça dans chrome.storage.local // 4. On ouvre un nouvel onglet avec viewer.html chrome.action.onClicked.addListener(async (tab) => { try { if (!tab.url || !tab.url.startsWith("https://itsma.vd.ch/")) { await chrome.storage.local.set({ planningError: "Cette extension ne fonctionne que sur https://itsma.vd.ch/. " + "Va d'abord sur la page du planning, puis reclique sur l'icône." }); await openViewer(); return; } // Injecter un script dans l'onglet pour extraire le HTML const results = await chrome.scripting.executeScript({ target: { tabId: tab.id }, func: extractPlanningFromPage }); const data = results[0]?.result; if (!data || !data.html) { await chrome.storage.local.set({ planningError: "Impossible de lire le contenu de la page. " + "Assure-toi d'être bien sur la page du planning des techniciens." }); await openViewer(); return; } // Stocker le HTML capturé + l'URL de base pour les requêtes futures await chrome.storage.local.set({ planningHtml: data.html, planningUrl: tab.url, planningCapturedAt: Date.now(), planningError: null }); await openViewer(); } catch (err) { console.error("Erreur extension:", err); await chrome.storage.local.set({ planningError: "Erreur inattendue : " + (err?.message || String(err)) }); await openViewer(); } }); // Fonction injectée dans la page du planning // (elle s'exécute dans le contexte de itsma.vd.ch, pas dans le service worker) function extractPlanningFromPage() { // Récupérer tout le HTML de la page const html = document.documentElement.outerHTML; return { html: html }; } async function openViewer() { const viewerUrl = chrome.runtime.getURL("viewer.html"); await chrome.tabs.create({ url: viewerUrl }); }