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