// ==UserScript== // @name 链接新标签页打开工具 // @name:en Smart Tab Opener // @name:zh-CN 智能新标签页打开 // @version 1.12 // @description 自动在新标签页打开链接,但保持导航类链接的默认打开行为 // @description:en Open links automatically in new tabs, but keep the default open behavior of navigation class links // @description:zh-CN 自动在新标签页打开链接,但保持导航类链接的默认打开行为 // @author dal // @match *://*/* // @grant none // @license MIT // @namespace http://tampermonkey.net/ // @downloadURL none // ==/UserScript== (function() { 'use strict'; const NAV_RELATED_ELEMENTS = [ 'nav', 'menu', 'dropdown', 'header', 'select', 'navigat', 'section', 'button', ]; // 导航相关的类名关键字 const NAV_RELATED_CLASS_KEYWORDS = [ 'nav', 'menu', 'dropdown', 'header', 'select', 'navigat', 'breadcrumb', 'section', 'chapter', 'tree', 'n-tab-links', 'channel', 'side-bar', 'sidebar' ]; document.addEventListener('click', function(e) { console.log('点击事件触发:', e.target); // 查找被点击元素的最近的 A 标签父元素 let target = e.target; while (target && target.tagName !== 'A') { target = target.parentElement; } // 如果找到了链接元素 if (target && target.tagName === 'A') { console.log('找到链接元素:', target); console.log('链接href:', target.href); let isNavLink = false; // 检查父元素 let parent = target; for (let depth = 0; depth < 5; depth++) { if (!parent) break; console.log(`检查第 ${depth + 1} 层父元素:`, parent.tagName, parent.classList ? Array.from(parent.classList) : '无类名', ); // 检查标签名 if (NAV_RELATED_ELEMENTS.includes(parent.tagName.toLowerCase())) { console.log(`与导航相关的标签名:`, parent.tagName); isNavLink = true; break; } // 检查类名 if (parent.classList && parent.classList.length > 0) { if (NAV_RELATED_CLASS_KEYWORDS.some(navClass => Array.from(parent.classList).some(cls => cls.toLowerCase().includes(navClass.toLowerCase()) ) )) { console.log(`与导航相关的类名:`, parent.classList ? Array.from(parent.classList) : '无类名', ); isNavLink = true; break; } } // 检查链接本身的 ID if (parent.id) { if (NAV_RELATED_CLASS_KEYWORDS.some(keyword => target.id.toLowerCase().includes(keyword.toLowerCase()) )) { console.log('与导航相关的的ID:', parent.id); isNavLink = true; break; } } parent = parent.parentElement; } const url = target.href; if (url && !url.startsWith('javascript:')) { // 如果是导航链接 if (isNavLink) { console.log('这是一个导航链接'); // 检查是否设置为新标签页打开 if (target.target === '_blank') { console.log('原本是新标签页打开,改为当前页面打开'); e.preventDefault(); window.location.href = url; } else { console.log('保持默认打开方式'); } } else { // 非导航链接,在新标签页打开 console.log('非导航链接,在新标签页打开'); e.preventDefault(); window.open(url, '_blank'); } } } }, true); })();