无论气泡/目标如何,捕获给定类型的所有*事件

时间:2016-03-29 18:35:17

标签: javascript dom google-chrome-extension javascript-events event-handling

我正在撰写Chrome扩展程序,需要通知所有点击&密钥事件,无论是否在使用代码时调用dirname / etc。这意味着stopPropagation不在桌面上。

我尝试了以下内容:

尝试1:进入document.addEventListener

addEventListener

尝试2:进入const _addEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(eventName, eventHandler) { console.log('DOM Event', eventName); _addEventListener.call(this, eventName, eventHandler); };

stopPropagation

尝试3:陷入偶数构造函数

const _stopPropagation = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function() {
    console.log('Stop Propagation:', this);
    return _mouseEvent.apply(this, arguments);
};

作为最后的手段,我可​​以在每个 DOM元素上添加我自己的const _mouseEvent = MouseEvent; MouseEvent = function() { console.log('Mouse Event:', this); return _mouseEvent.apply(this, arguments); }; const _keyboardEvent = KeyboardEvent; KeyboardEvent = function() { console.log('Keyboard Event:', this); return _keyboardEvent.apply(this, arguments); }; 事件监听器 - 但这似乎是一些看似应该可行的事情的开销。

任何人都知道可行的选择吗?

1 个答案:

答案 0 :(得分:1)

Gah,我不知道我忘了useCapture。这有效:

document.addEventListener('click', function() {}, true /* <--- this */);