135 lines
4.6 KiB
JavaScript
135 lines
4.6 KiB
JavaScript
// popup.js
|
||
|
||
document.addEventListener("DOMContentLoaded", async () => {
|
||
document.getElementById("project-name").innerText = PROJECT_NAME;
|
||
|
||
const options = await loadOptions();
|
||
const bannerElement = document.getElementById("project-banner");
|
||
if (bannerElement && (options.showBanner ?? SHOW_BANNER_DEFAULT)) {
|
||
bannerElement.innerText = `Erstellt mit ${PROJECT_NAME} – deinem datenschutzfreundlichen Helfer gegen unerlaubte Cookie-Banner.`;
|
||
}
|
||
|
||
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
|
||
document.getElementById("current-url").value = tab.url;
|
||
|
||
const violationsDiv = document.getElementById("violations");
|
||
VIOLATION_TYPES.forEach(type => {
|
||
const label = document.createElement("label");
|
||
label.innerHTML = `<input type="checkbox" value="${type}"> ${type}`;
|
||
violationsDiv.appendChild(label);
|
||
});
|
||
|
||
document.getElementById("screenshot-btn").addEventListener("click", createScreenshot);
|
||
// PDF-Funktion aktuell deaktiviert:
|
||
// document.getElementById("create-pdf-btn").addEventListener("click", preparePDF);
|
||
document.getElementById("create-email-btn").addEventListener("click", prepareEmail);
|
||
document.getElementById("open-options-btn").addEventListener("click", openOptions);
|
||
});
|
||
|
||
// Optionen laden
|
||
async function loadOptions() {
|
||
const result = await chrome.storage.local.get('options');
|
||
return result.options || {};
|
||
}
|
||
|
||
// Screenshot erstellen und speichern
|
||
async function createScreenshot() {
|
||
try {
|
||
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
|
||
const imageUri = await chrome.tabs.captureVisibleTab(tab.windowId, { format: "png" });
|
||
|
||
const url = new URL(tab.url);
|
||
const domain = url.hostname.replace('www.', '');
|
||
|
||
const now = new Date();
|
||
const timestamp = now.getFullYear().toString()
|
||
+ String(now.getMonth() + 1).padStart(2, '0')
|
||
+ String(now.getDate()).padStart(2, '0')
|
||
+ String(now.getHours()).padStart(2, '0')
|
||
+ String(now.getMinutes()).padStart(2, '0');
|
||
|
||
const filename = `${timestamp}_${domain}.png`;
|
||
|
||
const response = await fetch(imageUri);
|
||
const blob = await response.blob();
|
||
const blobUrl = URL.createObjectURL(blob);
|
||
|
||
await chrome.downloads.download({
|
||
url: blobUrl,
|
||
filename: `cookiekop/screenshots/${filename}`, // Vorschlagpfad
|
||
saveAs: true
|
||
});
|
||
|
||
// Kein alert mehr notwendig!
|
||
} catch (error) {
|
||
console.error("Fehler beim Screenshot:", error);
|
||
alert("Screenshot konnte nicht gespeichert werden.");
|
||
}
|
||
}
|
||
|
||
// (PDF erstellen Funktion bleibt auskommentiert – später aktivieren)
|
||
|
||
// E-Mail vorbereiten
|
||
async function prepareEmail() {
|
||
const url = document.getElementById("current-url").value;
|
||
const violations = Array.from(document.querySelectorAll('#violations input:checked')).map(input => input.value);
|
||
const note = document.getElementById("custom-note").value;
|
||
const options = await loadOptions();
|
||
|
||
let body = `Sehr geehrte Damen und Herren,\n\n`;
|
||
body += `ich möchte folgende Verstöße gegen die DSGVO im Zusammenhang mit dem Cookie-Banner melden:\n\n`;
|
||
violations.forEach(v => {
|
||
body += `- ${v}\n`;
|
||
});
|
||
body += `\nURL: ${url}\n`;
|
||
if (note) {
|
||
body += `\nZusätzliche Hinweise: ${note}\n`;
|
||
}
|
||
|
||
if (options.showBanner ?? true) {
|
||
body += `\n\nErstellt mit CookieKop – https://gitlab.com/1337gut/cookiekop`;
|
||
}
|
||
|
||
body += `\n\nMit freundlichen Grüßen\n\n`;
|
||
|
||
const subject = encodeURIComponent("Meldung eines Cookie-Banner-Verstoßes");
|
||
const bodyEncoded = encodeURIComponent(body);
|
||
|
||
let recipient = "poststelle@lda.bayern.de"; // Fallback
|
||
if (options?.state) {
|
||
try {
|
||
const response = await fetch('data/datenschutzbehoerden.json');
|
||
const authorities = await response.json();
|
||
const found = authorities.find(entry => entry.bundesland === options.state);
|
||
if (found && found.email) {
|
||
recipient = found.email;
|
||
}
|
||
} catch (error) {
|
||
console.error("Fehler beim Laden der Behördenliste:", error);
|
||
}
|
||
}
|
||
|
||
const mailtoLink = `mailto:${recipient}?subject=${subject}&body=${bodyEncoded}`;
|
||
|
||
try {
|
||
await chrome.tabs.create({ url: mailtoLink });
|
||
} catch (error) {
|
||
console.error("Fehler beim Öffnen von mailto:", error);
|
||
fallbackCopyEmailText(body);
|
||
}
|
||
}
|
||
|
||
// Fallback: E-Mail-Text in Zwischenablage kopieren
|
||
function fallbackCopyEmailText(text) {
|
||
navigator.clipboard.writeText(text).then(() => {
|
||
alert("E-Mail-Text wurde kopiert. Bitte öffne dein E-Mail-Programm und füge ihn ein (Strg+V).");
|
||
}).catch(err => {
|
||
console.error("Kopieren fehlgeschlagen:", err);
|
||
alert("Fehler beim Kopieren des E-Mail-Texts.");
|
||
});
|
||
}
|
||
|
||
// Optionen-Seite öffnen
|
||
function openOptions() {
|
||
chrome.runtime.openOptionsPage();
|
||
} |