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:
@ -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 });
|
|
||||||
}
|
|
||||||
})();
|
})();
|
Reference in New Issue
Block a user