您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
全站通用型页内增强脚本,Bing兼容,bili兼容
当前为
// ==UserScript== // @name 当页开链 // @version 3.7.3 // @description 全站通用型页内增强脚本,Bing兼容,bili兼容 // @author none // @match *://*/* // @grant unsafeWindow // @run-at document-body // @namespace // @namespace // @namespace // ==/UserScript== (function() { 'use strict'; // 函数用于在当前标签页中打开链接 function openLinkInCurrentTab(url) { window.location.href = url; } // 拦截所有点击事件 document.addEventListener('click', function(event) { var target = event.target; // 新增排除播放器容器逻辑(2025-03-02更新) if (target.closest('#ks')) { return true; // 保留播放器原生交互 } // 新增排除播放器容器逻辑(2025-03-02更新) if (target.closest('.bpx-player-ending-related-item-cover')) { return true; // 保留播放器原生交互 } // 新增排除bing选择弹出 if (target.closest('#qs_searchBox')) { return true; // 保留播放器原生交互 } // 检查点击的元素以及其父元素是否是链接 while (target && target.tagName !== 'A') { target = target.parentElement; } if (target && target.tagName === 'A') { // 阻止默认行为,即在新标签页中打开链接 event.preventDefault(); // 获取链接的目标 URL var url = target.href; // 在当前标签页中打开链接 openLinkInCurrentTab(url); } }); // 协议安全名单 const SAFE_PROTOCOLS = new Set([ 'http:', 'https:', 'ftp:', 'mailto:', 'tel:', 'sms:' ]); // 动态白名单(2025-03-01更新) const SEARCH_ENGINE_HOSTNAMES = new Set([ 'www.bing.com', 'cn.bing.com', 'www.google.com', 'www.baidu.com' ]); // 智能链接处理 const processElement = (element) => { // 排除Bing搜索按钮 if (element.closest('form[action="/search"]')) return; if (element.id === 'sb_form_go' || element.name === 'search') return; // 协议过滤 try { const href = element.href?.toLowerCase() || ''; const protocol = new URL(href, location.href).protocol; if (!SAFE_PROTOCOLS.has(protocol)) return; } catch(e) { return; } // 清理链接属性 ['target', 'onclick', 'data-target'].forEach(attr => { element.removeAttribute(attr); }); }; // 增强事件监听(修复Bing搜索提交问题) const initEventHandlers = () => { // 拦截点击事件时排除表单元素 document.addEventListener('click', function(event) { const target = event.composedPath()[0]; const isSearchEngine = SEARCH_ENGINE_HOSTNAMES.has(location.hostname); // 新增排除播放器容器逻辑(2025-03-02更新) if (target.closest('#ks')) { return true; // 保留播放器原生交互 } // 新增排除播放器容器逻辑(2025-03-02更新) if (target.closest('.bpx-player-ending-related-item-cover')) { return true; // 保留播放器原生交互 } // 新增排除播放器容器逻辑(2025-03-02更新) if (target.closest('#qs_searchBox')) { return true; // 保留播放器原生交互 } // 白名单处理逻辑 if (isSearchEngine) { // 允许Bing搜索按钮正常工作 if (target.closest('form#sb_form') || target.id === 'sb_form_go') { return true; } } // 常规链接处理 let node = target; while (node && node.tagName !== 'A') { node = node.parentElement; } if (node && node.tagName === 'A') { event.preventDefault(); window.location.href = node.href; } }, true); // 使用捕获阶段 // 兼容Bing的AJAX搜索(2025-03-01新增) if (SEARCH_ENGINE_HOSTNAMES.has(location.hostname)) { document.addEventListener('submit', function(e) { const form = e.target; if (form.action.includes('/search')) { form.setAttribute('target', '_self'); } }); } }; // 核心初始化 const main = () => { if (window.self !== window.top) return; // 设置基础标签 if (!document.querySelector('base')) { document.head.prepend( Object.assign(document.createElement('base'), { target: '_self' }) ); } // 初始化事件处理器 initEventHandlers(); // 处理window.open unsafeWindow.open = function(url) { window.location.href = url; }; }; // 启动逻辑 document.readyState === 'complete' ? main() : document.addEventListener('DOMContentLoaded', main); })();