我正在开发一个chrome扩展程序,其目的是为gmail中的每个附件添加“export to gdocs”链接。
我已经实现了部分代码,成功添加了“下载”链接旁边的链接,但是我遇到了一个我不知道如何解决的问题。
问题是:在邮件线程中(有多个回复),折叠的邮件不受我的脚本影响 - 当它们展开时,链接(如预期的那样)未添加。
发生这种情况的原因是折叠后的邮件在展开时会在运行时加载 - 所以当我的脚本在页面加载时执行时,没有链接要添加,因为邮件内容尚未加载。
我尝试使用原型框架和我在此处找到的示例代码添加更新处理程序:
http://groups.google.com/group/prototype-scriptaculous/browse_thread/thread/5ad539212ea07716?pli=1(上一篇文章)
但它不起作用 - 虽然解决方案本身是有效的,并且可以使用gmail。
使用chrome.tabs onUpdate侦听器(在后台文件中注册)和一些jquery(注入内容脚本)实现部分工作的解决方案:
选择具有“cr hf”css类的表(用于包含附件链接的表)
$('table.cf.hr').each(function() {
injectLink($(this));
});
每个,查找下载链接,从下载网址中提取一些参数, 创建一个新链接并添加到最后一个链接旁边
function injectLink(table) {
var downloadLink = table.find("td:last a:last");
var exportToGdocsLink = downloadLink.clone().attr(...)...
...
downloadLink.after(exportToGdocsLink).after("<span> </span>");
}
是否有人实施了与gmail交互的Chrome扩展程序?有什么提示让我弄清楚如何进行?
更新
最新版本的代码是:
$('#canvas_frame').ready(function() {
var doc = frames['canvas_frame'].contentDocument;
$(doc).find('table.cf.hr').livequery(function() {
injectLink($(this));
});
});
但我尝试了几种“组合” - 这是“最接近预期”的结果。 canvas_frame
是包含整个gmail界面的iframe。具有css类cr hf
的表包含附件链接。
由于 安东尼奥
答案 0 :(得分:2)
.live()
只有在您捕捉事件时才会有所帮助。
您可以使用live query jquery插件检测元素创建。
纯粹的javascript解决方案会收听DOMSubtreeModified
或DOMNodeInserted
events,只要DOM发生变化就会触发(只需要小心,因为一次可能只有几百个)。