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

Javascript GMail:在每个附件下载链接旁边添加一个链接,javascript,google-chrome-extension,gmail,Javascript,Google Chrome Extension,Gmail,我正在开发一个chrome扩展,其目的是为gmail中的每个附件添加一个“导出到gdocs”链接 我已经实现了部分代码,成功地将链接添加到“下载”链接旁边,但我面临一个不知道如何解决的问题 问题是:在邮件线程(有多个回复)中,折叠的邮件不受我的脚本的影响-当它们展开时,链接(如预期)不会被添加 发生这种情况的原因是,折叠的邮件在展开时会在运行时加载-因此,当我的脚本在页面加载时执行时,没有要添加的链接,因为邮件内容尚未加载 我尝试使用原型框架和我在此处找到的示例代码添加更新处理程序: (最后一篇

我正在开发一个chrome扩展,其目的是为gmail中的每个附件添加一个“导出到gdocs”链接

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

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

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

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

(最后一篇文章)

但是它不起作用——尽管这个解决方案本身是有效的,并且使用gmail

部分工作的解决方案是使用chrome.tabs onUpdate侦听器(在后台文件中注册)和一些jquery(作为内容脚本注入)实现的,其中:

选择具有“cr hf”css类(用于包含附件链接的类)的表

对于每一个,查找下载链接,从下载url提取一些参数, 创建新链接并在最后一个链接旁边添加

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界面的iframe。包含css类
cr hf
的表包含附件链接

谢谢 Antonio

.live()
只有在捕捉事件时才有用

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


纯javascript解决方案是监听
domsubtreemedited
DOMNodeInserted
,每当DOM发生变化时就会触发它们(只需小心,因为一次可能会有几百个)。jquery的
.live()
难道不能解决它吗?从未使用过这个。。。但我想知道这对我有什么帮助——据我所知,没有“更新内容”活动。你知道我应该用live()注册什么样的事件吗?@Antonio-你解决了这个问题吗?你的项目有可能在某个地方开源吗?@Shaihi:没有,对不起,我没有解决它。这是给我的一个客户的,所以我不能透露来源,即使我没有完成它。我尝试了live插件,但奇怪的事情发生了。我花了几个小时试图弄清楚它为什么不起作用,我偶然发现它起作用了,但不是在我期望的时候:只有当我点击代码添加的任何其他链接时,我的链接才会被添加。连接到click事件的js只需执行ajax操作call@Antonio你能把你的新代码加入这个问题吗?我还没有处理过gmail,所以我不知道所有的细节。我可能只看到javascript方面的东西。最新版本的代码是:$('canvas_frame').ready(function(){var doc=frames['canvas_frame'].contentDocument;$(doc.find('table.cf.hr').livequery(function(){injectLink($(this));});但我试过几种“组合”——这是“最接近预期”的结果。canvas_框架是包含整个gmail界面的iframe。具有css类“cr hf”的表包含附件链接。
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>");
}
$('#canvas_frame').ready(function() { 
    var doc = frames['canvas_frame'].contentDocument; 
    $(doc).find('table.cf.hr').livequery(function() { 
        injectLink($(this)); 
    }); 
});