Greasy Fork is available in English.
强制链接在新标签页打开,脚本采用白名单的模式,在油猴自带的菜单里面控制开关
// ==UserScript==// @name 强制页面在新标签页打开// @namespace http://tampermonkey.net/// @version 0.1.5// @description 强制链接在新标签页打开,脚本采用白名单的模式,在油猴自带的菜单里面控制开关// @author You// @match http://*/*// @match https://*/*// @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com// @grant GM_registerMenuCommand// @grant GM_unregisterMenuCommand// @grant unsafeWindow// @license MIT// ==/UserScript==;(function () {"use strict"//网页白名单管理function whiteListManage() {let menuId//开启function open() {GM_unregisterMenuCommand(menuId)hookPageWhenDomChange()hookPage()localStorage.setItem("whiteList_a5c9f2b1", "true")GM_registerMenuCommand("关闭", function () {close()})}//关闭function close() {GM_unregisterMenuCommand(menuId)localStorage.setItem("whiteList_a5c9f2b1", "false")location.reload()}let whiteList = localStorage.getItem("whiteList_a5c9f2b1")if (!whiteList || whiteList === "false") {menuId = GM_registerMenuCommand("开启", open)} else if (whiteList === "true") {hookPageWhenDomChange()hookPage()menuId = GM_registerMenuCommand("关闭", close)}}//修改页面以实现链接在新标签页打开function hookPage() {hookWindowOpen()hookATag()}function hookATag() {// 获取页面上的所有链接元素let links = document.getElementsByTagName("a")for (let i = 0; i < links.length; i++) {//如果标签的href属性为空或者是javascript:开头的则跳过if (!links[i].href ||links[i].href.startsWith("javascript:") ||links[i].href.endsWith("#") ||links[i].href.endsWith("#;")) {continue}// 遍历每个链接元素并添加目标属性links[i].setAttribute("target", "_blank")//给标签添加点击事件,点击后标红links[i].addEventListener("click", function () {this.style.color = "darkred"})}}function hookWindowOpen() {// 保存原始的 window.open 方法的引用let originalOpen = unsafeWindow.open// 重写 window.open 方法unsafeWindow.open = function (url, target, features) {// 在新标签页中打开链接originalOpen.call(this, url, "_blank", features)}}//监听dom节点变化以应对异步刷新的场景,一旦dom节点发生变化则重新执行hookPagefunction hookPageWhenDomChange() {let MutationObserver =window.MutationObserver || window.WebKitMutationObserverlet observer = new MutationObserver(function (mutations) {mutations.forEach(function (mutation) {hookATag()})})observer.observe(document.body, {childList: true, // 观察目标子节点的变化,是否有添加或者删除subtree: true, // 观察后代节点,默认为 falseattributes: false, // 观察属性变动})}function init() {whiteListManage()}init()})()