GMail:在每个附件下载链接旁边添加一个链接

时间:2011-08-24 16:50:00

标签: javascript google-chrome-extension gmail

我正在开发一个chrome扩展程序,其目的是为gmail中的每个附件添加“export to gdocs”链接。

我已经实现了部分代码,成功添加了“下载”链接旁边的链接,但是我遇到了一个我不知道如何解决的问题。

问题是:在邮件线程中(有多个回复),折叠的邮件不受我的脚本影响 - 当它们展开时,链接(如预期的那样)未添加

发生这种情况的原因是折叠后的邮件在展开时会在运行时加载 - 所以当我的脚本在页面加载时执行时,没有链接要添加,因为邮件内容尚未加载。

我尝试使用原型框架和我在此处找到的示例代码添加更新处理程序:

http://groups.google.com/group/prototype-scriptaculous/browse_thread/thread/5ad539212ea07716?pli=1(上一篇文章)

http://jsbin.com/utuvu

但它不起作用 - 虽然解决方案本身是有效的,并且可以使用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>&nbsp;&nbsp;&nbsp;</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的表包含附件链接。

由于 安东尼奥

1 个答案:

答案 0 :(得分:2)

.live()只有在您捕捉事件时才会有所帮助。

您可以使用live query jquery插件检测元素创建。

纯粹的javascript解决方案会收听DOMSubtreeModifiedDOMNodeInserted events,只要DOM发生变化就会触发(只需要小心,因为一次可能只有几百个)。