捕获给定类型的所有事件,而不考虑气泡/目标



我正在编写一个Chrome扩展,它需要被通知所有clickkeyup事件,无论在使用代码时是否调用了stopPropagation/etc。这意味着document.addEventListener不在表中。

我尝试过以下几种:

尝试1:挂入addEventListener

const _addEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(eventName, eventHandler) {
    console.log('DOM Event', eventName);
    _addEventListener.call(this, eventName, eventHandler);
};

尝试2:挂入stopPropagation

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

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

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

作为最后的手段,我可以在每个DOM元素上添加我自己的click事件侦听器,但对于看起来应该可行的东西来说,这似乎是一大笔开销。

有人知道可行的选择吗?

Gah,我不知道我是怎么忘记useCapture的。这项工作:

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

相关内容

  • 没有找到相关文章

最新更新