unbind и подменить функцию обработчика - пробовал, но не удалось. После долгого гугления нашёл 2 пути :
1. Это компонент
http://sprymedia.co.uk/VisualEvent/demo/
Как я понял там просто находятся все функции обработки, в зависимости от js движка. Достаточно много кода и муторно вытаскивать и удалять .
2. Нашёл такую функцию getEventListeners в консоли хрома. Она возвращает список событий на элементе, у которых есть функция remove(). Идеально было бы, но так и не получилось получить доступ из моего расширения.
И вариант вроде рабочий, немного изврат но ...
mouseDown = function(e) {
var obj = document.createElement('div');
obj.id = '__chm_click';
obj.style.cssText = 'position:fixed;top:0px;left:0px;width:100%;height:100%; background-color:red; ';
document.body.appendChild(obj);
};
mouseUp = function(e) {
var elClick = document.getElementById('__chm_click');
elClick.parentNode.removeChild(elClick);
};
document.addEventListener('mousedown', mouseDown);
document.addEventListener('mouseup', mouseUp);
Тупо создаём слой при нажатии на любой элемент. Вроде пока работает.