点击链接变暗并加波浪线,标记持续到标签页关闭
// ==UserScript==
// @name 标记已点击链接
// @description 点击链接变暗并加波浪线,标记持续到标签页关闭
// @version 1.0
// @author WJ
// @match *://*/*
// @license MIT
// @grant none
// @run-at document-body
// @namespace https://greasyfork.org/users/914996
// ==/UserScript==
(() => {
'use strict';
// 样式:变暗+波浪线
const sheet = new CSSStyleSheet();
sheet.replaceSync('a.x-marked{opacity:.7!important;text-decoration:underline wavy #0ce!important}');
document.adoptedStyleSheets.push(sheet);
// 读取已标记
const marked = new Set(JSON.parse(sessionStorage.xMarked || '[]'));
// 标记链接的函数
const mark = a => a.classList.toggle('x-marked', marked.has(a.href));
// 首次全扫
document.body.querySelectorAll('a[href]').forEach(mark);
// 监听新节点
new MutationObserver(muts => muts.forEach(m => m.addedNodes.forEach(n =>
n.nodeType === 1 && (n.tagName === 'A' ? mark(n)
: n.querySelectorAll?.('a[href]').forEach(mark))
))).observe(document.body, {childList: true, subtree: true});
// 点击记录
document.addEventListener('click', e => {
const a = e.target.closest('a[href]');
if (a && !a.closest(`
nav,footer,aside,
.btn,.nav,.navbar,.navigation,.menu,.menubar,
.breadcrumb,.pagination,.tabs,.tabbar,.sidebar,.footer,
[role="navigation"],[role="menu"],[role="tablist"],[role="banner"]`)){
marked.add(a.href);
sessionStorage.xMarked = JSON.stringify([...marked]);
a.classList.add('x-marked')}
}, true);
})();