Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmail似乎能捕捉所有键盘事件。有什么办法解决这个问题吗?_Javascript_Javascript Events_Google Chrome_Gmail_Google Chrome Extension - Fatal编程技术网

Javascript Gmail似乎能捕捉所有键盘事件。有什么办法解决这个问题吗?

Javascript Gmail似乎能捕捉所有键盘事件。有什么办法解决这个问题吗?,javascript,javascript-events,google-chrome,gmail,google-chrome-extension,Javascript,Javascript Events,Google Chrome,Gmail,Google Chrome Extension,我正在编写一个Chrome扩展,它启动一个带有键盘快捷键的脚本。它在大多数页面上都能正常工作,但我意识到在Gmail上却不行:似乎所有的键盘事件都被Gmail捕获了,并没有被我的功能激发出来 我有一个内容脚本(在Chrome扩展中,它被添加到您想要的任何页面),它(当然是简化的): 但实际上,Gmail确实让我失望了。我知道脚本已加载。我尝试了窗口的不同变体。addEventListener和其他事件类型都没有用 有人知道绕过这个的方法吗? 我试着看看GreaseMonkey脚本是否能做到这一点

我正在编写一个Chrome扩展,它启动一个带有键盘快捷键的脚本。它在大多数页面上都能正常工作,但我意识到在Gmail上却不行:似乎所有的键盘事件都被Gmail捕获了,并没有被我的功能激发出来

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

但实际上,Gmail确实让我失望了。我知道脚本已加载。我尝试了
窗口的不同变体。addEventListener
和其他事件类型都没有用

有人知道绕过这个的方法吗? 我试着看看GreaseMonkey脚本是否能做到这一点,这让我来到了这里:但这对我没有帮助


谢谢

您可以尝试重定向过程:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}

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

它不是一个扩展,而是一个user/Greasemonkey脚本,但它是通过两次输入逗号(,)触发的,并且在GMail中工作


也许这能帮你找到源头。你可以在这里下载:

好的,我有一个有效的解决方案,从onePassword插件反向工程。我只能猜测为什么会这样,我估计这是因为在输入元素中添加了事件。但是,如果更改任何内容,它将停止工作(底部的重拨呼叫位于底部是有原因的)


正如你所看到的,我使用了重定向。顺便说一句,这个例子非常粗糙,所以不要只是使用它

你可以要求所有用户在他们的Gmail设置中禁用键盘快捷键。但他们可能不喜欢这样。我不确定它是否会起作用。不,那不太可行。老实说,我的分机做得不多,所以我无法想象有人会做出这样的权衡。此外,我是目前唯一的用户,所以我不希望:)
document.body.onkeypress
返回空值。这两种方法有什么区别?毫无疑问,我尝试了
document.body.onkeypress=function(){alert('sdf');}
以及
window.onkeypress
,但没有得到更好的结果。谢谢,我会看看并尝试获得我需要的。如果有,我会更新的。好的,我知道了。事实证明,它与Gmail捕获事件并保存事件本身并没有太大关系:有一个Chrome扩展设置可以使脚本匹配所有帧或仅匹配最上面的帧。它默认只使用最上面的一个,Gmail使用iFrame。所以我的脚本没有加载到需要加载的地方。()感谢这个工作示例,它帮助我进一步挖掘。我遇到了完全相同的问题,但将allframes设置为true仍然不允许我在gmail中捕获键盘事件。特别是在撰写电子邮件和在正文中键入内容时。你能证实你有这种行为吗?不管是什么原因,我的脚本在Gmail上根本不起作用了。Gmail是我从未注销过的网站之一,所以我不知道这是从什么时候开始的……你可以看看我最终做了什么:(注意:这仍在进行中;-))不过我不需要做任何重定向。我缺少的主要东西是在清单中:加上“所有的框架”:我忘了提到,我还必须加上所有的框架。谢谢你的链接
if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
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);