// ==UserScript== // @name 强制所有链接在当前标签打开 // @namespace https://greasyfork.org/zh-CN/scripts/446917-%E5%BC%BA%E5%88%B6%E6%89%80%E6%9C%89%E9%93%BE%E6%8E%A5%E5%9C%A8%E5%BD%93%E5%89%8D%E6%A0%87%E7%AD%BE%E6%89%93%E5%BC%80 // @version 0.31 // @license MIT // @description 强制所有链接在当前标签打开,本脚本采用白名单机制,需手动点击油猴脚本的菜单生效 // @grant unsafeWindow // @author meteora // @match *://*/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== // ==UserScript== // @name 强制所有链接在当前标签打开 // @namespace https://greasyfork.org/zh-CN/scripts/446917-%E5%BC%BA%E5%88%B6%E6%89%80%E6%9C%89%E9%93%BE%E6%8E%A5%E5%9C%A8%E5%BD%93%E5%89%8D%E6%A0%87%E7%AD%BE%E6%89%93%E5%BC%80 // @version 0.29 // @license MIT // @description 强制所有链接在当前标签打开,本脚本采用白名单机制,需手动点击油猴脚本的菜单生效 // @grant unsafeWindow // @author meteora // @match *://*/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_setValue // @grant GM_getValue // @downloadURL https://update.greasyfork.org/scripts/446917/%E5%BC%BA%E5%88%B6%E6%89%80%E6%9C%89%E9%93%BE%E6%8E%A5%E5%9C%A8%E5%BD%93%E5%89%8D%E6%A0%87%E7%AD%BE%E6%89%93%E5%BC%80.user.js // @updateURL https://update.greasyfork.org/scripts/446917/%E5%BC%BA%E5%88%B6%E6%89%80%E6%9C%89%E9%93%BE%E6%8E%A5%E5%9C%A8%E5%BD%93%E5%89%8D%E6%A0%87%E7%AD%BE%E6%89%93%E5%BC%80.meta.js // ==/UserScript== ;(function () { "use strict" //排除iframe if (window.self !== window.top) { return } // 白名单管理 function whiteList() { let domainEnable let subDomainEnable //一级域名,例如:baidu.com let currentDomain = location.hostname.split(".").slice(-2).join(".") //二级域名,例如 www.baidu.com let currentSubDomain = location.hostname let domainList = GM_getValue("n2GndfLDBAh_domainList") let subDomainList = GM_getValue("n2GndfLDBAh_subDomainList") if (domainList) { // domainList = JSON.parse(domainList) for (let i = 0; i < domainList.length; i++) { const item = domainList[i] if (item === currentDomain) { domainEnable = true GM_registerMenuCommand("排除 " + currentDomain, () => { domainList.splice(i, 1) GM_setValue("n2GndfLDBAh_domainList", domainList) unsafeWindow.location.reload() }) break } } } if (!domainEnable) { GM_registerMenuCommand("添加 " + currentDomain, () => { if (!domainList) { domainList = [] } domainList.push(currentDomain) GM_setValue("n2GndfLDBAh_domainList", domainList) unsafeWindow.location.reload() }) } if (subDomainList) { // subDomainList = JSON.parse(subDomainList) for (let i = 0; i < subDomainList.length; i++) { const item = subDomainList[i] if (item === currentSubDomain) { subDomainEnable = true GM_registerMenuCommand("排除 " + currentSubDomain, () => { subDomainList.splice(i, 1) GM_setValue( "n2GndfLDBAh_subDomainList", subDomainList ) unsafeWindow.location.reload() }) break } } } if (!subDomainEnable && currentSubDomain !== currentDomain) { GM_registerMenuCommand("添加 " + currentSubDomain, () => { if (!subDomainList) { subDomainList = [] } subDomainList.push(currentSubDomain) GM_setValue("n2GndfLDBAh_subDomainList", subDomainList) unsafeWindow.location.reload() }) } return domainEnable || subDomainEnable } if (!whiteList()) return false document.head.appendChild(document.createElement("base")).target = "_self" //替换form标签里面的target属性 let domList = document.querySelectorAll("form") for (let i = 0; i < domList.length; i++) { domList[i].target = "_self" } //替换a标签里面的target属性 domList = document.querySelectorAll("a") for (let i = 0; i < domList.length; i++) { domList[i].target = "_self" } const listener = function (e) { let dom = e.target if (dom.nodeName === "A") { dom.target = "_self" return } //循环迭代获取父节点 for (let i = 0; i < 5; i++) { dom = dom.parentNode //如果是a标签 if (dom.nodeName === "A") { dom.target = "_self" return } } } document.body.addEventListener("click", listener, true) //对于调用window.open跳转的 const open = unsafeWindow.open const newOpen = function ( url = false, target = "_self", windowFeatures = false ) { if (url && windowFeatures) { open(url, "_self", windowFeatures) } else if (url) { open(url, "_self") } else { open() } } Object.defineProperty(unsafeWindow, "open", { value: newOpen, }) })()