您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display a confirmation dialog when the site wants to open a new tab. This won't work if the user opens a link in a new tab using web browser's "Open in a new tab", "Open in background tab", or similar which are web browser internal features or browser extension features.
当前为
// ==UserScript== // @name Prompt On New Tab // @namespace https://gf.qytechs.cn/en/users/85671-jcunews // @version 1.1.14 // @license GNU AGPLv3 // @description Display a confirmation dialog when the site wants to open a new tab. This won't work if the user opens a link in a new tab using web browser's "Open in a new tab", "Open in background tab", or similar which are web browser internal features or browser extension features. // @author jcunews // @match *://*/* // @grant none // @run-at document-start // ==/UserScript== /* Information about rejectList and allowList can be found on below URL. https://gf.qytechs.cn/en/scripts/38392-prompt-on-new-tab */ var rejectList = [ ["*", "*://*.doubleclick.net/*"], ["*", /^https?:\/\/[^.]+\.adservices?\.com\//i], ["*://site.com/*", /^.*?:\/\/site\.com\/(offer|popup)/i] ]; var allowList = [ ["*://www.bing.com/*", "*"], ["*://www.google.*/*", "*://*.google.*/*"] ]; [rejectList, allowList].forEach(function(list) { list.forEach(function(pair) { pair.forEach(function(str, i) { if (("string" === typeof str) || (str instanceof String)) { pair[i] = new RegExp("^" + str.replace(/([(){}\[\]\\^$.+?|])/g, "\\$1").replace(/([*])/g, ".*?") + "$", "i"); } }); }); }); function checkUrl(target, curUrl) { function checkUrlPair(pair) { if (pair[0].test(curUrl) && pair[1].test(target)) return true; } curUrl = location.href; if (rejectList.some(checkUrlPair)) { return -1; } else if (allowList.some(checkUrlPair)) { return 1; } else return 0; } function getFrameNames(fs, r) { function doEle(ele, n, i, z) { try { n = ele.tagName; } catch(z) { n = ""; } if (fs.indexOf(n) >= 0) { try { r.push(ele.name); } catch(z) {} } else if (n) { for (i = ele.childElementCount-1; i >= 0; i--) { try { n = ele.children[i].tagName; } catch(z) { n = ""; } if (fs.indexOf(n) >= 0) { try { r.push(ele.children[i].name); } catch(z) {} } else if (n) { doEle(ele.children[i]); } } } } fs = ["IFRAME", "FRAME"]; r = []; doEle(document.body); return r; } (function(open_, submit_, ele) { function dummy(){} function isExistingFrameName(name) { return (!name || ["_parent", "_self", "_top"].indexOf(name) >= 0) || (getFrameNames().indexOf(name) >= 0); } open_ = window.open; window.open = function(url, name) { var loc = {}; if (isExistingFrameName(name)) { return open_.apply(this, arguments); } else switch (checkUrl(url)) { case 1: return open_.apply(this, arguments); case 0: if (confirm("This site wants to open a new tab.\nDo you want to allow it?\n\nURL:\n" + url)) { return open_.apply(this, arguments); } } return { document: { close: dummy, location: loc, open: dummy, write: dummy }, location: loc }; }; function reject(ev) { if (!ev || !ev.preventDefault) return; ev.preventDefault(); ev.stopPropagation(); ev.stopImmediatePropagation(); } function actionCheckUrl(url, msg, ev) { switch (checkUrl(url)) { case 0: if (!confirm(msg + "\nDo you want to allow it?\n\nURL:\n" + url)) { reject(ev); return false; } else break; case -1: reject(ev); return false; } return; } function onFormSubmit(ev) { if ((/^https?:/).test(this.action) && !isExistingFrameName(this.target)) { return actionCheckUrl(this.action, "This site wants to submit a form in a new tab.", ev); } return; } submit_ = HTMLFormElement.prototype.submit; HTMLFormElement.prototype.submit = onFormSubmit; addEventListener("submit", function(ev){ return onFormSubmit.call(ev.target, ev); }, true); function onAnchorClick(ev) { if ((/^(?:f|ht)tps?:/).test(this.href) && !isExistingFrameName(this.target)) { return actionCheckUrl(this.href, "This site wants to open a new tab.", ev); } return; } addEventListener("click", function(ev, a){ if (ev.button || !(a = ev.target)) return; if (a.tagName === "A") { return onAnchorClick.call(a, ev); } else { while (a = a.parentNode) { if (a.tagName === "A") return onAnchorClick.call(a, ev); } } }, true); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址