Javascript 带有GMail的Chrome扩展内容脚本中的键盘绑定

Javascript 带有GMail的Chrome扩展内容脚本中的键盘绑定,javascript,google-chrome-extension,gmail,Javascript,Google Chrome Extension,Gmail,我正在创建一个Chrome扩展,它通过内容脚本使用键绑定(即将使用javascript keydown和keyup事件处理程序)。不过,我在尝试使用GMail时遇到了一个障碍 以下代码(内容脚本)中的handler函数似乎仅在我通过GChat与某人聊天时触发: $(window).bind('keydown', function(e){console.log('yay!');}); 不幸的是,它似乎没有激活任何其他地方,包括当我试图发送电子邮件。我查看了GMail网页源代码,发现所有实际显示的

我正在创建一个Chrome扩展,它通过内容脚本使用键绑定(即将使用javascript keydown和keyup事件处理程序)。不过,我在尝试使用GMail时遇到了一个障碍

以下代码(内容脚本)中的handler函数似乎仅在我通过GChat与某人聊天时触发:

$(window).bind('keydown', function(e){console.log('yay!');});
不幸的是,它似乎没有激活任何其他地方,包括当我试图发送电子邮件。我查看了GMail网页源代码,发现所有实际显示的内容都位于一个id为
canvas\u frame
的iFrame中,因此我尝试了以下方法:

$('#canvas_frame').content().live('keydown', function(e){console.log('yay!');});
这是:

$('#canvas_frame').content().find('body').live('keydown', function(e){
  console.log('yay!');
});
不幸的是,这也不起作用

我的
manifest.json
如下所示:

{
  "name": "extension",
  "version": "1.0",
  "description": "description",
  "background_page": "background.html",
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "css": [],
      "js": [ 
              "main.js"
            ]
    }
  ],
  "all_frames": true,
  "permissions": [
    "http://*/*", "https://*/*"
  ]
}
我想知道是否有人知道发生了什么,GMail的正确方法是什么,如果
$('canvas_frame').content().live(…)
是正确的方法


谢谢

您的
所有\u帧
参数在清单中放错了位置,它应该是:

"content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "all_frames": true,
      "js": ["main.js"]
    }
],
我将通过将内容脚本注入iframe本身并在那里进行所有键绑定来解决这个问题。识别这些iFrame的URL,并向每个iFrame中注入单独的内容脚本。例如:

"content_scripts": [
    {
      "matches": ["http://gmail.com/*"],
      "all_frames": false,
      "js": ["main.js"]
    },
    {
      "matches": ["http://gmail.com/iframe1.html"],
      "all_frames": true,
      "js": ["iframe1.js"]
    },
    {
      "matches": ["http://gmail.com/iframe2.html"],
      "all_frames": true,
      "js": ["iframe2.js"]
    }
],

哦,哇。谢谢你的帮助。每个帧都有一个内容脚本的问题是GMail当前动态编辑iFrame,这意味着不同的iFrame最初可能具有相同的
src
属性,但功能不同。不过,我知道了如何将键绑定附加到特定iFrame中的元素。类似于
document.getElementById('canvas_frame').contentDocument.onkeydown=handler
的东西可以工作,如果我想使用
jQuery.live
观看特定元素,也可以工作。