Anti key and mouse hijacking on sites

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);