Aktualisiere das Skript "Links im neuen Tab öffnen", um die GM_* API für das Speichern und Abrufen von Domains zu verwenden.

This commit is contained in:
Akamaru
2025-07-11 20:56:03 +02:00
parent cd5f678869
commit 365ce82bcb

View File

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