diff --git a/open-links-in-new-tab.user.js b/open-links-in-new-tab.user.js index e36070c..c74f74f 100644 --- a/open-links-in-new-tab.user.js +++ b/open-links-in-new-tab.user.js @@ -1,11 +1,13 @@ // ==UserScript== // @name Links im neuen Tab öffnen // @namespace https://git.ponywave.de/Akamaru/Userscripts -// @version 1.0 +// @version 1.1 // @description Öffnet alle Links auf bestimmten Seiten im neuen Tab. Seiten können hinzugefügt oder entfernt werden. // @author Akamaru // @match *://*/* // @grant GM_registerMenuCommand +// @grant GM_getValue +// @grant GM_setValue // @updateURL https://git.ponywave.de/Akamaru/Userscripts/raw/branch/master/open-links-in-new-tab.user.js // ==/UserScript== @@ -14,77 +16,76 @@ const STORAGE_KEY = 'openLinksInNewTab_domains'; - // Domains aus localStorage laden oder Standardwert setzen - function getDomains() { - const data = localStorage.getItem(STORAGE_KEY); - if (data) { - try { - return JSON.parse(data); - } catch { - return []; - } + // Domains aus GM_* API laden oder Standardwert setzen + async function getDomains() { + const data = await GM_getValue(STORAGE_KEY, '[]'); + try { + return JSON.parse(data); + } catch { + return []; } - return []; } - function setDomains(domains) { - localStorage.setItem(STORAGE_KEY, JSON.stringify(domains)); + async function setDomains(domains) { + await GM_setValue(STORAGE_KEY, JSON.stringify(domains)); } function getCurrentDomain() { return window.location.hostname; } - function isActiveDomain() { - const domains = getDomains(); + async function isActiveDomain() { + const domains = await getDomains(); return domains.includes(getCurrentDomain()); } - function addDomain(domain) { - const domains = getDomains(); + async function addDomain(domain) { + const domains = await getDomains(); if (!domains.includes(domain)) { domains.push(domain); - setDomains(domains); + await setDomains(domains); alert(`Domain hinzugefügt: ${domain}`); } else { alert(`Domain ist bereits in der Liste: ${domain}`); } } - function removeDomain(domain) { - let domains = getDomains(); + async function removeDomain(domain) { + let domains = await getDomains(); if (domains.includes(domain)) { domains = domains.filter(d => d !== domain); - setDomains(domains); + await setDomains(domains); alert(`Domain entfernt: ${domain}`); } else { alert(`Domain ist nicht in der Liste: ${domain}`); } } - function showDomains() { - const domains = getDomains(); + async function showDomains() { + const domains = await getDomains(); alert('Aktive Domains:\n' + (domains.length ? domains.join('\n') : 'Keine')); } // Menü-Befehle if (typeof GM_registerMenuCommand !== 'undefined') { GM_registerMenuCommand('Aktive Domains anzeigen', showDomains); - GM_registerMenuCommand('Diese Seite hinzufügen', () => addDomain(getCurrentDomain())); - GM_registerMenuCommand('Diese Seite entfernen', () => removeDomain(getCurrentDomain())); + GM_registerMenuCommand('Diese Seite hinzufügen', async () => await addDomain(getCurrentDomain())); + GM_registerMenuCommand('Diese Seite entfernen', async () => await removeDomain(getCurrentDomain())); } // Links anpassen, wenn Domain aktiv ist - if (isActiveDomain()) { - function updateLinks() { - document.querySelectorAll('a[href]:not([target="_blank"])').forEach(link => { - link.setAttribute('target', '_blank'); - link.setAttribute('rel', 'noopener noreferrer'); - }); + (async () => { + if (await isActiveDomain()) { + function updateLinks() { + document.querySelectorAll('a[href]:not([target="_blank"])').forEach(link => { + link.setAttribute('target', '_blank'); + link.setAttribute('rel', 'noopener noreferrer'); + }); + } + updateLinks(); + // Für dynamisch geladene Inhalte (z.B. Single Page Apps) + const observer = new MutationObserver(updateLinks); + observer.observe(document.body, { childList: true, subtree: true }); } - updateLinks(); - // Für dynamisch geladene Inhalte (z.B. Single Page Apps) - const observer = new MutationObserver(updateLinks); - observer.observe(document.body, { childList: true, subtree: true }); - } + })(); })(); \ No newline at end of file