如何获得chrome扩展热键与Gmail,雅虎邮件等?

时间:2012-01-07 01:24:52

标签: javascript google-chrome-extension hotkeys webmail

我使用以下代码为Chrome扩展程序实现热键:

// content script:
  window.addEventListener("keydown", function(event) {
      if (event.ctrlKey && event.keyCode == 81) {alert('Ctrl+Q Pressed!');}
    }, false);

由于在清单文件中插入以下行,因此在大多数情况下都可以使用,即使选择了iFrame:

...
  "content_scripts": [
    {
      "all_frames": true
...

例如使用http://danish.typeit.org,热键即使现在也可以使用该个人消息和Facebook个人消息进行输入。除了在使用gmail,yahoo mail或gmx编写电子邮件时,它似乎无处不在。选择组合框时,热键不起作用。这是令人失望的,因为我希望人们可以使用我的扩展程序来帮助编写电子邮件。而Twitter,在Twitter上打字时也不起作用。

1 个答案:

答案 0 :(得分:0)

我认为,即使您指定了all_frames,也没有为编辑器iframe加载内容脚本的原因是内容脚本仅应用于包含页面时标记中存在的iframe加载。

在gmail页面的情况下,页面上有多个iframe,一些存在于包含页面的标记中(内容脚本应用于哪个),然后是编辑器的一个iframe,它被创建在页面加载后通过JavaScript。

即使您尝试等待页面上的JavaScript加载编辑器的iframe,内容脚本中的JavaScript也无法访问它,因为访问iframe的contentWindow对象是{{3} }。

远景可能是将一个JavaScript文件注入DOM,然后执行内容脚本中的逻辑。

内容脚本可能类似于:

document.body.appendChild(document.createElement("script")).src = "http://external/file/javascript.js";

然后远程JavaScript文件的内容可以尝试访问编辑器iframe,您可能需要使用setInterval直到创建元素。

// These are the IDs gmail uses, each mail app would be different
document.getElementById("canvas_frame").contentWindow.document.getElementById(":nt")