🚀你是否曾被论坛里那些恼人的外部链接搞得不胜其烦?💎
- 点个链接,当前页面就直接跳转了,好不容易找到的帖子瞬间没了?
- 签名区、个人页的推广链接偷偷摸摸地把你带跑,还得手动返回?
- 每次点个外部链接都得经过那个“好麻烦!好麻烦!好麻烦!”的拦截提示页,然后才能手动点击“立即跳转”?
是时候终结这些烦恼了! 我为大家带来了精心打磨的 Nodeseek 链接优化脚本,它将彻底革新你的浏览体验!
💥 这脚本,专治论坛“链接病”!
核心理念就是:让外部链接的跳转体验彻底由你掌控,并智能过滤推广内容!
✨ 极致功能,让你用了就回不去:
🚀 全站智能拦截,强制新标签页提示!
- 终结跳页噩梦! 无论是帖子内容区、签名区,还是个人信息页,全站所有含推广敏感词(如
aff
,reg
,ad
,promo
)的外部链接,都会被脚本智能识别并统一拦截。 - 拦截后,它们不再直接跳转,而是强制在新标签页打开 Nodeseek 官方的
/jump?to=
中转提示页!告别当前页面被突然劫持的尴尬,让浏览始终顺畅。
- 终结跳页噩梦! 无论是帖子内容区、签名区,还是个人信息页,全站所有含推广敏感词(如
⚡️ 纯净外部链接,一键新标签页直达!
- 告别繁琐点击! 那些不含敏感词的纯净外部链接(比如 GitHub 链接、技术博客等),再也不用每次都经过那个多余的拦截页了!
- 本脚本自动识别,并直接在新标签页中打开访问!就像你说的:“爽死了!爽死了!爽死了!” 省去重复确认的步骤,直达目标,极致便捷。
🚫 帖子标题链接,彻底变文本!
- 帖子标题那个“可有可无”的链接,终于可以彻底消失了!它将被转换为纯文本,杜绝一切误触,页面更加干净。
🤔 为什么它是你的 Nodeseek 必备神器?
- 体验升级: 告别烦人的跳转,每次点击都胸有成竹。
- 隐私安全: 一定程度上减少直接访问未知推广链接的风险。
- 效率倍增: 纯净链接直达,省去重复操作。
- 全站覆盖: 无论论坛哪个角落的链接,都能为你服务。
📥 立即体验:
确保你的浏览器已安装 Tampermonkey (油猴脚本) 扩展。
安装本脚本:
➡️ 油猴扩展图标->添加新脚本->输入代码->文件->保存 ⬅️
// ==UserScript==// @name Nodeseek 链接革命 - 告别烦恼,体验丝滑全站浏览// @namespace http://tampermonkey.net/// @version 1.0 // 版本号// @description 将包含推广关键词的外部链接重定向至Nodeseek中转页,所有外部链接在新标签页打开,同时保留原有标题链接转换功能。// @author NodeSeeks// @match *://www.nodeseek.com/*// @grant none// ==/UserScript==(function() { 'use strict'; // 定义您要过滤的推广关键词数组 const keywordFilters = ['aff', 'reg', 'ad', 'promo']; // 您可以根据需要添加更多关键词 // 获取当前页面的域名,用于判断是否是外部链接 const currentHostname = window.location.hostname; /** * 处理外部链接: * 1. 将包含推广关键词的外部链接重定向至 Nodeseek 的 /jump?to= 中转页。 * 2. 确保所有非 Nodeseek 域名的链接都在新标签页打开。 * @param {HTMLAnchorElement} link 要处理的超链接元素。 */ function processExternalLinkBehavior(link) { const originalHref = link.href; // 确保链接有 href 属性 if (!originalHref) { return; } // --- 1. 判断是否是 Nodeseek 内部链接 --- const isNodeseekInternalLink = (link.hostname === currentHostname); // --- 2. 如果是外部链接,强制在新标签页打开 --- if (!isNodeseekInternalLink) { link.setAttribute('target', '_blank'); } // --- 3. 处理已是 /jump?to= 且包含敏感词的链接 (不再重复处理) --- // 这种链接已经是我们期望的推广中转页了,不再对其做额外处理 if (originalHref.includes('/jump?to=')) { try { const jumpToMatch = originalHref.match(/jump\?to=(.+)/); if (jumpToMatch && jumpToMatch[1]) { const decodedJumpUrl = decodeURIComponent(jumpToMatch[1]).toLowerCase(); for (const keyword of keywordFilters) { if (decodedJumpUrl.includes(keyword)) { // console.log('Skipping existing jump+aff link:', originalHref); // 调试用 return; // 跳过不处理 } } } } catch (e) { console.error('Nodeseek: Error decoding jump URL for exclusion:', originalHref, e); } } // --- 4. 检查是否是需要重定向的外部推广链接 --- // 只有非 Nodeseek 域名的链接才进行敏感词判断,或者那些虽然是 /jump?to= 但目标不含敏感词的链接 if (!isNodeseekInternalLink || originalHref.includes('/jump?to=')) { const lowerHref = originalHref.toLowerCase(); const lowerText = link.textContent.toLowerCase(); let containsSensitiveKeyword = false; for (const keyword of keywordFilters) { if (lowerHref.includes(keyword) || lowerText.includes(keyword)) { containsSensitiveKeyword = true; break; } } if (containsSensitiveKeyword) { let targetUrl = originalHref; // 如果原始链接就是 /jump?to= 形式,获取它真正的目标 URL来重定向 if (originalHref.includes('/jump?to=')) { const jumpToMatch = originalHref.match(/jump\?to=(.+)/); if (jumpToMatch && jumpToMatch[1]) { targetUrl = decodeURIComponent(jumpToMatch[1]); } } // 构造新的 /jump?to= 链接 const newJumpUrl = `/jump?to=${encodeURIComponent(targetUrl)}`; // 替换链接的 href link.href = newJumpUrl; // console.log(`重定向外部推广链接: ${originalHref} -> ${newJumpUrl}`); // 调试用 } } } /** * 将 h1 标题内的特定超链接转换为纯文本。 * @param {Element|Document} container 要处理的容器元素或整个文档。 */ function processTitleLinks(container) { const titleLinks = container.querySelectorAll('h1 a.post-title-link'); titleLinks.forEach(link => { if (link.parentNode && link.parentNode.tagName === 'H1') { const span = document.createElement('span'); span.textContent = link.textContent; link.replaceWith(span); // console.log('Optimized title link:', span.textContent); // 调试用 } }); } /** * 统一的处理函数,遍历容器内的所有相关元素。 * @param {Element|Document} container 要处理的容器元素。 */ function processAllLinksInContainer(container) { if (!container || !container.querySelectorAll) return; // 获取容器内的所有 a 标签 const allLinksInContainer = container.querySelectorAll('a'); allLinksInContainer.forEach(link => { processExternalLinkBehavior(link); // 处理外部链接行为和推广重定向 }); processTitleLinks(container); // 处理标题链接(保持不变) } /** * 初始化脚本,设置 MutationObserver 并处理初始页面链接。 */ function applyNodeseekOptimizations() { // --- 1. 设置 MutationObserver 监控 DOM 变化 --- const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes.length > 0) { mutation.addedNodes.forEach((node) => { if (node.nodeType === 1) { processAllLinksInContainer(node); } }); } }); }); // --- 2. 首次加载时和延迟处理页面中的所有现有链接 --- processAllLinksInContainer(document); setTimeout(() => { processAllLinksInContainer(document); }, 500); // 延迟 500 毫秒 // --- 3. 开始观察整个 document.body 元素 --- observer.observe(document.body, { childList: true, subtree: true }); // console.log('Nodeseek Optimizations: MutationObserver started on document.body.'); // 调试用 } // 脚本初始化:确保在 Nodeseek 域名下执行优化 document.addEventListener('DOMContentLoaded', () => { if (currentHostname === 'www.nodeseek.com') { applyNodeseekOptimizations(); // console.log('Nodeseek Optimizations: Script initialized.'); // 调试用 } }); // 额外:监听 'load' 事件,在所有资源加载完成后再处理一次 window.addEventListener('load', () => { if (currentHostname === 'www.nodeseek.com') { processAllLinksInContainer(document); // console.log('Nodeseek Optimizations: Full page load processing.'); // 调试用 } });})();
- 安装完成后,刷新 Nodeseek 页面,即可感受前所未有的畅快浏览!
还在等什么?赶紧给你的 Nodeseek 体验来一次全面升级吧!
如果你在使用过程中有任何问题或建议,欢迎随时在本帖下反馈!