您需要先安装一个扩展,例如 篡改猴、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()
- })
- })()