// ==UserScript== // @name Links im neuen Tab öffnen // @namespace https://git.ponywave.de/Akamaru/Userscripts // @version 1.0 // @description Öffnet alle Links auf bestimmten Seiten im neuen Tab. Seiten können hinzugefügt oder entfernt werden. // @author Akamaru // @match *://*/* // @grant GM_registerMenuCommand // @updateURL https://git.ponywave.de/Akamaru/Userscripts/raw/branch/master/open-links-in-new-tab.user.js // ==/UserScript== (function() { 'use strict'; 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 []; } } return []; } function setDomains(domains) { localStorage.setItem(STORAGE_KEY, JSON.stringify(domains)); } function getCurrentDomain() { return window.location.hostname; } function isActiveDomain() { const domains = getDomains(); return domains.includes(getCurrentDomain()); } function addDomain(domain) { const domains = getDomains(); if (!domains.includes(domain)) { domains.push(domain); setDomains(domains); alert(`Domain hinzugefügt: ${domain}`); } else { alert(`Domain ist bereits in der Liste: ${domain}`); } } function removeDomain(domain) { let domains = getDomains(); if (domains.includes(domain)) { domains = domains.filter(d => d !== domain); setDomains(domains); alert(`Domain entfernt: ${domain}`); } else { alert(`Domain ist nicht in der Liste: ${domain}`); } } function showDomains() { const domains = 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())); } // 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'); }); } updateLinks(); // Für dynamisch geladene Inhalte (z.B. Single Page Apps) const observer = new MutationObserver(updateLinks); observer.observe(document.body, { childList: true, subtree: true }); } })();