10

我正在编写一个 Chrome 扩展程序,它使用键盘快捷键启动一个脚本。它在大多数页面上都可以正常工作,但我意识到在 Gmail 上却不行:似乎所有键盘事件都被 Gmail 捕获并且没有冒泡到我的功能中。

我有一个内容脚本(在 Chrome 扩展中,它被添加到您想要的任何页面),它具有(当然简化了):

document.body.addEventListener('keypress', myFunction, true);
function myFunction(event) {
    console.log("yay, Gmail didn't let me down!");
}

但实际上,Gmail 确实让我失望了。我知道脚本加载。我尝试了不同的变体window.addEventListener和其他事件类型,但无济于事。

有人知道绕过这个的方法吗?我试图看看 GreaseMonkey 脚本是否可以做到这一点,这把我带到了这里:http ://code.google.com/p/gmail-greasemonkey/但这对我没有帮助。

4

3 回答 3

1

好的,我有一个可行的解决方案,从 onePassword 插件进行逆向工程。我只能猜测为什么会这样,我认为这是因为将事件添加到输入元素。然而,改变任何东西,它就会停止工作(底部的 redir 调用在底部是有原因的)

function redir(e) {
    e.focus();
    var h = document.createEvent("KeyboardEvent");
    h.initKeyboardEvent('keydown', true, true);
    e.dispatchEvent(h)
}
$("input").each(function(t,l) {redir(l)});

document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && e.keyCode) {
      if (e.keyCode == 190) {
        chrome.extension.sendRequest({name: "spot-openPopUp"});
      }
    }
},false);

redir(document.body);

如您所见,我使用了重定向。这个例子真的很粗糙,所以不要只使用它

于 2010-11-09T15:26:20.450 回答
1

我不知道 GMail 的键盘事件捕获的内部工作原理,但我最近为 Chrome 编写了一个简单的键盘快捷键导航器(因此我不必使用鼠标单击链接)。

它不是一个扩展程序,而是一个用户/Greasemonkey 脚本,但它是通过输入逗号 (,) 两次触发的,并且可以在 GMail 中使用。

也许它会帮助您查看源代码。你可以在这里下载:http: //userscripts.org/scripts/show/68609

于 2010-02-25T13:19:07.510 回答
0

您可以尝试重定向过程:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
于 2010-02-24T05:55:51.673 回答