您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Provides ability to enable/disable specific events (accessible from GM menu) on a site page which are specifically listened by the site and browser extensions. When an event is disabled, event handlers including the web browser's, will be disabled.
// ==UserScript== // @name Event Control // @namespace https://greasyfork.org/en/users/85671-jcunews // @version 1.0.2 // @license AGPL v3 // @author jcunews // @description Provides ability to enable/disable specific events (accessible from GM menu) on a site page which are specifically listened by the site and browser extensions. When an event is disabled, event handlers including the web browser's, will be disabled. // @match *://*/* // @include *:* // @grant GM_registerMenuCommand // @run-at document-start // ==/UserScript== //Note: Since web browsers do not provide an execution order or load order for browser extensions, // event handlers from browser extensions can not be disabled if their code is run before this script. ((evs, ael) => { evs = {}; function eventGate(ev) { if ((!ev.target || !ev.target.closest || !ev.target.closest("#selc_ujs")) && (ev.type in evs) && !evs[ev.type]) { ev.stopImmediatePropagation(); ev.stopPropagation(); ev.preventDefault() } } ael = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(typ, fn, opts) { let s = String(typ); if (s && !(s in evs)) ael.call(this, typ, eventGate, {capture: evs[s] = true, passive: false}); return ael.apply(this, arguments) }; GM_registerMenuCommand("Event List", () => { document.documentElement.insertAdjacentHTML("beforeend", ` <div id="selc_ujs"><style> #selc_ujs, #selc_ujs *{all:revert;box-sizing:border-box;font-family:sans-serif} #selc_ujs{position:fixed;left:0;top:0;width:100vw;height:100vh;background:#0007;cursor:pointer} #selc_pop{position:absolute;right:2em;border:.2em solid #007;border-radius:.3em;padding:.3em;max-height:75vh;overflow-y:scroll;background:#fff;cursor:auto} #selc_pop label{display:block;padding-right:.3em} #selc_pop label:hover{background:#ddf} </style><div id="selc_pop">${ Object.keys(evs).sort().map(k => `<label><input ${evs[k] ? "checked" : ""} type="checkbox" data-key="${k}"/> ${k}</label>`).join("") }</div>`); selc_ujs.onclick = ev => { (ev.target === selc_ujs) && selc_ujs.remove() }; selc_ujs.addEventListener("input", ev => { evs[ev.target.dataset.key] = ev.target.checked }); document.activeElement && document.activeElement.blur() }) })()