【发布时间】:2021-08-10 21:45:32
【问题描述】:
我正在编写一个浏览器扩展,它需要将处理程序附加到所有页面上的keyup 和keydown 事件。我可以使用以下内容脚本代码使其正常工作。
document.addEventListener("keydown",keyDown, true);
document.addEventListener("keyup", keyUp, true);
我无法让它在 Gmail 中工作。具体来说,在撰写新电子邮件的正文时,我无法让它工作。它适用于我测试过的其他任何地方。我认为问题在于 Gmail 在所有键盘事件上都调用了stopPropagation,但很难调试它们的最小化代码。我认为将第三个参数设置为true 会导致在CAPTURE_PHASE 期间捕获事件,但这不起作用。
如何在使用 Google Chrome 内容脚本在 Gmail 中编写新正文时捕获 keyup 和 keydown 事件?
编辑:
通过将"all_frames": true, 添加到我的清单,我确保我的内容脚本被注入到 DOM 的所有 iframe 中。我什至尝试过使用以下代码:
document.addEventListener("DOMNodeInserted", function (event) {
if(event.type === "DOMNodeInserted") {
if(event.srcElement.nodeName === "IFRAME") {
console.log(event.srcElement.nodeName + " iframe detected");
event.srcElement.addEventListener("keydown", function(kevent) {
document.dispatchEvent(kevent);
}, true);
event.srcElement.addEventListener("keyup", function(kevent) {
document.dispatchEvent(kevent);
}, true);
}
}
},true);
这仍然不能解决 Gmail 的问题。
【问题讨论】:
-
Gmail 也往往有很多 iframe。确保您正在侦听正确事件中的事件。
-
我已确保将我的内容脚本注入到所有 iframe 中。我什至尝试过一个构建,当 iframe 被添加到 DOM 时我检测到:(见编辑)
标签: javascript google-chrome-extension gmail dom-events