Files
Planification/background.js
T

62 lines
1.8 KiB
JavaScript

// background.js — Service worker (Manifest V3)
//
// Au clic sur l'icône :
// 1. Vérifier qu'on est bien sur itsma.vd.ch (sinon message d'erreur)
// 2. Injecter un script dans la page qui récupère le HTML complet
// 3. Stocker dans chrome.storage.local (persistant, sert de "dernière capture")
// 4. Ouvrir 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;
}
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 sur la page du planning des techniciens."
});
await openViewer();
return;
}
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();
}
});
function extractPlanningFromPage() {
return { html: document.documentElement.outerHTML };
}
async function openViewer() {
const viewerUrl = chrome.runtime.getURL("viewer.html");
await chrome.tabs.create({ url: viewerUrl });
}