2011-08-24 91 views
0

我正在研究一個擴展的擴展,其目的是向gmail中的每個附件添加一個「export to gdocs」鏈接。GMail:在每個附件下載鏈接旁邊添加一個鏈接

我已經實現了成功添加「下載」鏈接旁邊鏈接的部分代碼,但是我面臨着一個我不知道如何解決的問題。

問題是:在郵件線程中(有幾個回覆),摺疊的郵件不受我的腳本的影響 - 並且當它們展開時,鏈接(如預期的)不會添加

發生這種情況的原因是摺疊的郵件在運行時在展開時加載 - 所以當我的腳本在頁面加載時執行時,由於郵件內容尚未加載,所以沒有鏈接添加。

我嘗試使用原型框架和示例代碼,我發現這裏添加更新處理:

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擴展?任何暗示讓我想出如何繼續?

UPDATE

代碼的最新版本是這樣的:

$('#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

不會jquery的'.live()'能夠解決它嗎? – serg

+0

從來沒有用過......但我不知道它如何幫助我 - 據我所知,沒有「更新內容」事件。任何想法,我應該使用live()註冊什麼樣的事件? – Antonio

+0

@Antonio - 你是否設法解決這個問題?您的項目是否有機會在某處開放源代碼? – Shaihi

回答

2

.live()將是有益的。

你可以用live query jquery插件檢測元素的創建。

純JavaScript的解決辦法是聽DOMSubtreeModifiedDOMNodeInsertedevents其火,只要改變DOM(只是需要小心,因爲可能有數百那幾個在同一時間)。

+0

我試過活插件,但有些奇怪的事情發生。我花了幾個小時試圖弄清楚爲什麼它不起作用,隨便我發現它可以工作,但不是當我期望的時候:只有當我點擊我的代碼添加的任何其他鏈接時,纔會添加我的鏈接。附加到點擊事件的JS簡單地做ajax調用 – Antonio

+0

btw感謝您的建議 – Antonio

+0

@Antonio你可以把你的新代碼到問題?我還沒有處理Gmail,所以我不知道所有的細節。我可能只會發現一些JavaScript方面的東西。 – serg