您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
控制链接在当前或新标签页打开,分页链接始终在当前页打开// ==/UserScript==
// ==UserScript== // @name 链接地址全在【当前/新建】标签页中打开(翻页除外) // @namespace Open in self/new tab. // @match *://*/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_getValue // @grant GM_setValue // @version 0.0.4 // @author 稻米鼠 (恋恋修改:优化分页链接处理) // @description 控制链接在当前或新标签页打开,分页链接始终在当前页打开// ==/UserScript== /** 获取是否在新标签打开链接 **/ let isOpenInNewTab = GM_getValue('inNewPage', true); console.log('是否在新标签打开:', isOpenInNewTab) const menuNames = ['切换为:在新标签打开链接', '切换为:在当前标签打开链接'] /** * 判断是否为分页链接 * 匹配类似 /page/3/、/page/4/ 这样的分页格式 */ function isPaginationLink(url) { try { // 解析链接并获取路径部分 const parsedUrl = new URL(url); const path = parsedUrl.pathname; // 匹配分页模式:/page/数字/ 或 /page/数字 const paginationPattern = /\/page\/\d+(\/)?$/i; return paginationPattern.test(path); } catch (e) { return false; } } const main = ()=>{ document.querySelectorAll('a').forEach(el=>{ // 获取链接地址,优先使用href属性 const linkUrl = el.href; // 如果是分页链接,强制在当前标签页打开 if (isPaginationLink(linkUrl)) { el.target = '_self'; return; // 跳过后续处理 } // 非分页链接,根据用户设置处理 if(isOpenInNewTab){ if(/^_blank$/i.test(el.target)) return; el.target = '_blank'; }else{ if(/^(_self)?$/i.test(el.target)) return; el.target = '_self'; } }) } const init = (caption, captionRemove)=>{ GM_unregisterMenuCommand(captionRemove); GM_registerMenuCommand(caption, ()=>{ isOpenInNewTab = !isOpenInNewTab; GM_setValue('inNewPage', isOpenInNewTab); main(); alert('当前页面立刻生效,其他页面刷新后生效。'); }); } // 初始化菜单 if(isOpenInNewTab){ init(menuNames[1], menuNames[0]); }else{ init(menuNames[0], menuNames[1]); } // 初始执行 main(); // 监听DOM变化,处理动态加载的链接 document.addEventListener('DOMNodeInserted', (e)=>{ main(); }); // 页面加载完成后再次执行 window.addEventListener('load', ()=>{ main(); });