强制 ThunderStore 所有链接在新标签页打开
// ==UserScript==
// @name ThunderStore: Force Links to Open in New Tab
// @namespace http://tampermonkey.net/
// @version 1.0.0
// @description 强制 ThunderStore 所有链接在新标签页打开
// @match https://thunderstore.io/c/hollow-knight-silksong/
// @license MIT
// @grant none
// ==/UserScript==
(function() {
'use strict';
function forceLinksNewTab(root=document) {
const links = root.querySelectorAll('a[href]');
for (const a of links) {
a.setAttribute('target', '_blank');
a.setAttribute('rel', 'noopener noreferrer'); // 安全最佳实践
}
}
// 初始化处理页面已有链接
forceLinksNewTab();
// 监听后续 DOM 变化,处理动态生成的链接
const observer = new MutationObserver(mutations => {
for (const m of mutations) {
for (const node of m.addedNodes) {
if (node.nodeType === 1) { // element
if (node.matches?.('a[href]')) {
node.setAttribute('target', '_blank');
node.setAttribute('rel', 'noopener noreferrer');
}
// 如果新增的是一个容器,里面可能有多个 a
forceLinksNewTab(node);
}
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
})();