在 Javascript 中捕获按键(Google 文档)

Jac*_*cob 3 javascript greasemonkey bookmarklet google-docs

我正在尝试编写一个小油脂猴脚本/书签/您对 Google Docs 有什么帮助。我想添加的功能需要一个 keypress/keyup/keydown 事件处理程序(这三个之一)。不幸的是,Javascript 不是我的强项,而且我似乎无法在编辑窗格中捕获 (?) 按键事件。作为最后的手段,我尝试了以下方法:

javascript:(function(){
  els = document.getElementsByTagName("*");
  for(i=0;i<els.length;i++){
    els[i].onkeypress=function(){alert("hello!");};
    els[i].onkeyup=function(){alert("hello2!");};
    els[i].onkeydown=function(){alert("hello3!");};
  }
})();
Run Code Online (Sandbox Code Playgroud)

但是,这仍然无法在编辑窗格中捕获按键 - 没有烦人的警报(尽管它似乎适用于大多数其他网站......)。我已经检查了 Chrome 和 Firefox(我不能让它在任何一个中工作)。

我在 Firebug 中尝试了“日志事件”(并通过 Firebug 的一个简洁的小扩展,Eventbug 检查了所有注册的事件);似乎这些事件不是在按键上触发的。

编辑:
为了澄清 [Tim],我制作了带有一些注释的屏幕截图... 截屏

我正在谈论的“编辑窗格”似乎是一堆显示我输入的内容的 Javascripted div。

有任何想法吗?谢谢!

Tim*_*own 5

在 Google Docs 中编辑使用 iframe。您需要将侦听器附加到 iframe 的文档。它似乎对 iframe 做了一些复杂的事情,我还没有完全解决,但以下内容似乎适用于 Firefox:

var iframe = document.getElementsByTagName("iframe")[0];
if (iframe) {
    iframe.contentDocument.addEventListener("keypress", function(evt) {
        console.log("iframe keypress: " + evt.which);
    }, false);
}
Run Code Online (Sandbox Code Playgroud)