我想知道如何禁用事件监听器“复制”
我认为是这样的:
.js 文件:
let btn = document.getElementById('btn');
document.body.addEventListener('click', function(e) {
if (e.target.id === 'btn') {
e.stopPropagation();
}
}, {
capture: false
});
提前致谢!
manifest.json:
{
"name": "Test",
"version": "1.0",
"description": "Just testing!",
"manifest_version": 2,
"icons": {
"48": "images/icon_48.png",
"128": "images/icon_128.png"
},
"browser_action": {
"default_icon": "images/icon_16.png",
"default_popup": "popup.html"
}
}
最佳答案
要访问该网页,您需要 content script因为弹出窗口是一个单独的页面,有自己的 DOM、document
、window
、URL 等所有内容。
您还需要拦截 copy
事件,如 devtools 的事件监听器面板中所示:
manifest.json 应包含以下内容:
"content_scripts": [{
"matches": ["https://moller.jusbrasil.com.br/*"],
"js": ["content.js"],
"run_at": "document_start"
}]
内容.js:
window.addEventListener('copy', e => e.stopImmediatePropagation(), true);
让我们分解一下:
- 内容脚本在任何页面脚本之前的
document_start
处运行 - addEventListener 的第三个参数为
true
意味着我们的监听器在事件分派(dispatch)过程的捕获阶段被调用 - 在任何其他标准冒泡阶段监听器之前 window
是捕获阶段的第一个事件目标- 使用 stopImmediatePropagation() 是因为我们需要停止事件的后续冒泡,并防止页面脚本附加的任何其他监听器看到该事件
所以最终结果是保证我们的监听器在页面监听器之前被调用。
附注正如您所看到的,此任务不需要 browser_action 弹出窗口。
关于javascript - 如何从 Chrome 扩展上下文在页面上运行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192466/