Raw Source
k3a / Disable private events

// ==UserScript==
// @name         Disable private events
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  This disables events which most normal websites shouldn't need (mouse events, key up and down, etc).
// @description  These events leak private information and overrides are annoying (websites prevents right-clicks).
// @author       K3A
// @include        *
// @grant        none
// @run-at       document-start
// @downloadURL  https://raw.githubusercontent.com/k3a/userscripts.js/master/block-priv-events.user.js
// @license		 GNU GPL v3
// ==/UserScript==

function pe_before() {
    // Inspired by https://gist.github.com/alessioalex/fc536ef87713d0a9ed89

    // get HTMLDivElement, HTMLImageElement, HTMLUListElement, HTMLElement, HTMLDocument, ...
    var _interfaces = Object.getOwnPropertyNames(window).filter(function(i) {
      return /^HTML/.test(i);
    }).map(function(i) {
      return window[i];
    });

    var eventsToFilter = {};
    eventsToFilter.mouseenter = true;
    eventsToFilter.mouseover = true;
    eventsToFilter.mousemove = true;
    eventsToFilter.mousedown = true;
    eventsToFilter.mouseup = true;
    eventsToFilter.contextmenu = true;
    eventsToFilter.wheel = true;
    eventsToFilter.mouseleave = true;
    eventsToFilter.mouseout = true;
    eventsToFilter.select = true;
    eventsToFilter.touchstart = true;
    eventsToFilter.touchmove = true;
    eventsToFilter.touchleave = true;
    eventsToFilter.touchenter = true;
    eventsToFilter.touchend = true;
    eventsToFilter.touchcancel = true;
    eventsToFilter.keyup = true;
    eventsToFilter.keypress = true;
    eventsToFilter.keydown = true;
    eventsToFilter.focus = true;
    eventsToFilter.blur = true;
    eventsToFilter.cut = true;
    eventsToFilter.copy = true;
    eventsToFilter.paste = true;

    for (var i = 0; i < _interfaces.length; i++) {
      (function(original) {
        _interfaces[i].prototype.addEventListener = function(type, listener, useCapture) {
          if (eventsToFilter[type] === true) {
              console.log('BLOCKED addEventListener ' + type, listener, useCapture);
          } else {
              return original.apply(this, arguments);
          }
        };
      })(_interfaces[i].prototype.addEventListener);
    }
}

function pe_after() {
    document.onmouseup = null;
    document.onmousedown = null;
    document.oncontextmenu = null;

    var els = document.getElementsByTagName('*');
    for (var i = 0; i < els.length; i++) {
	var el = els[i];
	el.onmouseup = null;
        el.onmousedown = null;
	el.oncontextmenu = null;
    }
}

(function() {
    document.addEventListener ("DOMContentLoaded", pe_after);
    pe_before();
})();