commit 575797f53705d53f7d733544652a26d4dc04c22e Author: StuXn3t Date: Wed Jan 21 20:15:48 2026 +0000 Dateien nach "/" hochladen diff --git a/48x48.png b/48x48.png new file mode 100644 index 0000000..c7360b9 Binary files /dev/null and b/48x48.png differ diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ef036f2 --- /dev/null +++ b/manifest.json @@ -0,0 +1,25 @@ +{ + "manifest_version": 3, + "name": "CleanCacheMate", + "version": "1.0.0", + "description": "Löscht Service Workers, LocalStorage und führt einen Hard-Refresh durch", + "permissions": [ + "activeTab", + "scripting" + ], + "action": { + "default_title": "Cache & Storage leeren + Hard-Refresh", + "default_icon": { + "16": "48x48.png", + "32": "48x48.png", + "48": "48x48.png" + } + }, + "background": { + "service_worker": "service-worker.js" + }, + "icons": { + "16": "16x16.png", + "48": "48x48.png" + } +} diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..0f2bdf9 --- /dev/null +++ b/service-worker.js @@ -0,0 +1,83 @@ +// CleanCacheMate - Service Worker +// Wird bei Klick auf das Extension-Icon ausgeführt + +chrome.action.onClicked.addListener(async (tab) => { + // Nur auf http/https Seiten ausführen + if (!tab.url || (!tab.url.startsWith('http://') && !tab.url.startsWith('https://'))) { + console.log('CleanCacheMate: Kann nur auf http/https Seiten ausgeführt werden'); + return; + } + + try { + // Content Script in den aktiven Tab injizieren + await chrome.scripting.executeScript({ + target: { tabId: tab.id }, + func: cleanSiteData + }); + + // Hard-Refresh nach kurzer Verzögerung (damit Cleanup abgeschlossen ist) + setTimeout(() => { + chrome.tabs.reload(tab.id, { bypassCache: true }); + }, 100); + + // Visuelles Feedback: Badge kurz anzeigen + chrome.action.setBadgeText({ text: '✓', tabId: tab.id }); + chrome.action.setBadgeBackgroundColor({ color: '#4CAF50', tabId: tab.id }); + setTimeout(() => { + chrome.action.setBadgeText({ text: '', tabId: tab.id }); + }, 1500); + + } catch (error) { + console.error('CleanCacheMate Fehler:', error); + + // Fehler-Badge anzeigen + chrome.action.setBadgeText({ text: '!', tabId: tab.id }); + chrome.action.setBadgeBackgroundColor({ color: '#F44336', tabId: tab.id }); + setTimeout(() => { + chrome.action.setBadgeText({ text: '', tabId: tab.id }); + }, 2000); + } +}); + +// Diese Funktion wird im Kontext der Webseite ausgeführt +function cleanSiteData() { + const results = { + serviceWorkers: 0, + localStorage: false, + sessionStorage: false + }; + + // 1. Service Workers deregistrieren + if ('serviceWorker' in navigator) { + navigator.serviceWorker.getRegistrations().then(registrations => { + registrations.forEach(registration => { + registration.unregister(); + results.serviceWorkers++; + }); + console.log(`CleanCacheMate: ${results.serviceWorkers} Service Worker(s) deregistriert`); + }); + } + + // 2. LocalStorage leeren + try { + const localStorageLength = localStorage.length; + localStorage.clear(); + results.localStorage = true; + console.log(`CleanCacheMate: LocalStorage geleert (${localStorageLength} Einträge)`); + } catch (e) { + console.warn('CleanCacheMate: LocalStorage konnte nicht geleert werden', e); + } + + // 3. SessionStorage leeren + try { + const sessionStorageLength = sessionStorage.length; + sessionStorage.clear(); + results.sessionStorage = true; + console.log(`CleanCacheMate: SessionStorage geleert (${sessionStorageLength} Einträge)`); + } catch (e) { + console.warn('CleanCacheMate: SessionStorage konnte nicht geleert werden', e); + } + + console.log('CleanCacheMate: Cleanup abgeschlossen', results); + return results; +}