您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Prevent web apps from capturing and muting vital keyboard shortcuts. This will break some sites so use it on case by case situation.
// ==UserScript== // @name Anti key and mouse hijacking on sites // @description Prevent web apps from capturing and muting vital keyboard shortcuts. This will break some sites so use it on case by case situation. // @author Someone // @version 1.8.9 // @grant GM_registerMenuCommand // @license BSD // @include *example.com* // @namespace https://greasyfork.org/users/927418 // ==/UserScript== //Right Click window.pointers = window.pointers || { run: new Set(), scripts: new Set(), cache: new Map(), status: '' }; window.pointers.record = (e, name, value) => { window.pointers.cache.set(e, {name, value}); }; window.pointers.inject = code => { const script = document.createElement('script'); script.textContent = 'document.currentScript.dataset.injected = true;' + code; document.documentElement.appendChild(script); script.remove(); if (script.dataset.injected !== 'true') { const s = document.createElement('script'); s.src = 'data:text/javascript;charset=utf-8;base64,' + btoa(code); s.onload = () => s.remove(); document.documentElement.appendChild(s); window.pointers.scripts.add(s); return s; } else { window.pointers.scripts.add(script); return script; } }; // allow context-menu window.pointers.inject(` try { const ogs = { removed: false, misc: {} }; // alert ogs.misc.alert = window.alert; Object.defineProperty(window, 'alert', { get() { return ogs.removed ? ogs.misc.alert : (...args) => console.log('[alert is blocked]', ...args); }, set(c) { ogs.misc.alert ||= c; } }); // unblock contextmenu and more ogs.misc.mp = MouseEvent.prototype.preventDefault; Object.defineProperty(MouseEvent.prototype, 'preventDefault', { get() { return ogs.removed ? ogs.misc.mp : () => {}; }, set(c) { console.log('a try to overwrite "preventDefault"', c); ogs.misc.mp ||= c; } }); Object.defineProperty(MouseEvent.prototype, 'returnValue', { get() { return ogs.removed && 'v' in this ? this.v : true; }, set(c) { console.log('a try to overwrite "returnValue"', c); this.v = c; } }); ogs.misc.cp = ClipboardEvent.prototype.preventDefault; Object.defineProperty(ClipboardEvent.prototype, 'preventDefault', { get() { return ogs.removed ? ogs.misc.cp : () => {}; }, set(c) { ogs.misc.cp ||= c; } }); document.currentScript.addEventListener('remove', () => ogs.removed = true); document.currentScript.addEventListener('install', () => ogs.removed = false); } catch (e) {} `); { const skip = e => e.stopPropagation(); // bypass all registered listeners document.addEventListener('dragstart', skip, true); document.addEventListener('selectstart', skip, true); document.addEventListener('copy', skip, true); document.addEventListener('paste', skip, true); document.addEventListener('contextmenu', skip, true); document.addEventListener('mousedown', skip, true); window.pointers.run.add(() => { document.removeEventListener('dragstart', skip, true); document.removeEventListener('selectstart', skip, true); document.removeEventListener('copy', skip, true); document.removeEventListener('paste', skip, true); document.removeEventListener('contextmenu', skip, true); document.removeEventListener('mousedown', skip, true); }); } function handler(e){ if(e.button == 1 || (e.button == 0 && e.ctrlKey)){ e.stopPropagation(); } } function handler(e){ if(e.button == 1 || (e.button == 0 && e.AltlKey)){ e.stopPropagation(); } } addEventListener('click', handler, true); addEventListener('mousedown', handler, true); addEventListener('mouseup', handler, true); document.addEventListener("click", function(e){ if (e.button === 1 || e.button === 2){ e.stopPropagation(); } }, true); ctrlkeycodes = [70, 78, 82, 83, 84]; keycodes = [70, 76, 78, 82, 83, 84]; (window.opera ? document.body : document).addEventListener('keydown', function(e) { reclaim_all = false; // Turn this to true to kill ALL keyboard shortcuts allow = true; if (keycodes.indexOf(e.keyCode) != -1) { allow = false; } if(ctrlkeycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) { allow = false; } if (reclaim_all || (! allow)) { e.cancelBubble = true; e.stopImmediatePropagation(); } return false; }, !window.opera);