Javascript 带有GMail的Chrome扩展内容脚本中的键盘绑定
我正在创建一个Chrome扩展,它通过内容脚本使用键绑定(即将使用javascript keydown和keyup事件处理程序)。不过,我在尝试使用GMail时遇到了一个障碍 以下代码(内容脚本)中的handler函数似乎仅在我通过GChat与某人聊天时触发: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网页源代码,发现所有实际显示的
$(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
观看特定元素,也可以工作。