forked from FroSteel/Planification
62 lines
1.8 KiB
JavaScript
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 });
|
|
}
|