如何在 javascript 上打破 event.stopImmediatePropagation
how to break event.stopImmediatePropagation on javascript
在构建扩展程序时,网页禁用了所有 eventListener
s 并在我的测试扩展程序上禁用了 eventListener
s。例如,当事件监听器看起来像,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
但是网页禁用了事件监听器(我无法编辑网页)。正如我所期望的 Event.stopImmediatePropagation() 在所有事件侦听器上触发并阻止事件侦听器触发事件。喜欢,
let element = document.querySelector('#test');
// From the webpage,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
// From my test extension,
//this event listener is stopped by e.stopImmediatePropagation();
element.addEventListener('click', (e) => {
console.log('Extension is executed.');
});
<div id='test'>
Click me
</div>
我发现了一个关于 how to break event.stopImmediatePropagation 的问题。但是只有 jQuery.
的解决方案
我想知道如何仅使用 javascript 来打破 stopimmediatepropagation
。如有任何评论或回答,我们将不胜感激。
如果这真的是针对点击事件(或至少是冒泡事件),您可以在任何脚本 运行 之前在文档上添加捕获事件处理程序。这将确保您收到活动。
let element = document.querySelector('#test');
// From the webpage,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
// From your test extension,
// make it run before the page's scripts
// to be sure to also catch other "captured" events
document.addEventListener('click', (e) => {
if( e.composedPath().includes( element ) ) { // check that 'element' has really been clicked
console.log('Extension is executed.');
}
}, { capture: true }); // catch it in capture phase
<div id='test'>
Click me
</div>
在构建扩展程序时,网页禁用了所有 eventListener
s 并在我的测试扩展程序上禁用了 eventListener
s。例如,当事件监听器看起来像,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
但是网页禁用了事件监听器(我无法编辑网页)。正如我所期望的 Event.stopImmediatePropagation() 在所有事件侦听器上触发并阻止事件侦听器触发事件。喜欢,
let element = document.querySelector('#test');
// From the webpage,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
// From my test extension,
//this event listener is stopped by e.stopImmediatePropagation();
element.addEventListener('click', (e) => {
console.log('Extension is executed.');
});
<div id='test'>
Click me
</div>
我发现了一个关于 how to break event.stopImmediatePropagation 的问题。但是只有 jQuery.
的解决方案我想知道如何仅使用 javascript 来打破 stopimmediatepropagation
。如有任何评论或回答,我们将不胜感激。
如果这真的是针对点击事件(或至少是冒泡事件),您可以在任何脚本 运行 之前在文档上添加捕获事件处理程序。这将确保您收到活动。
let element = document.querySelector('#test');
// From the webpage,
element.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('A click event fired.');
});
// From your test extension,
// make it run before the page's scripts
// to be sure to also catch other "captured" events
document.addEventListener('click', (e) => {
if( e.composedPath().includes( element ) ) { // check that 'element' has really been clicked
console.log('Extension is executed.');
}
}, { capture: true }); // catch it in capture phase
<div id='test'>
Click me
</div>