gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:11:32 26 4
gpt4 key购买 nike

我正在编写一个 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: Hook 偶数构造函数

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 事件监听器——但是对于看起来应该如此的事情来说,这似乎是一个巨大的开销是可行的。

有人知道可行的选择吗?

最佳答案

啊,我不知道我怎么忘了 useCapture。这有效:

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

关于javascript - 捕获给定类型的*所有*事件,无论气泡/目标如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36292418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com