2011-09-14 77 views
1

我試圖編寫一個擴展來自動填寫傳出郵件的主題行。Thunderbird擴展,加載事件似乎只發生一次

以下代碼似乎只執行一次。它與Chrome的疊加層相關聯://messenger/content/messengercompose/messengercompose.xul,當用戶點擊寫入按鈕來撰寫新消息時,它將打開。第一次點擊寫入並在「到」字段中輸入文本時,主題行會自動填充。但是,如果我關閉「撰寫」窗口並創建一個新窗口,它將不會在「到」字段中註冊事件偵聽器。

var execute = { 
    onLoad: function(e){ 
     alert("onload"); 
     var addrTextbox = document.getElementById("addressCol2#1"); //"to" field 
     addrTextbox.addEventListener("change", execute.autoFillSubjectLine, false); 
    }, 

    autoFillSubjectLine: function(e){ 
     var msgSubject = document.getElementById("msgSubject"); 
     msgSubject.value = "text goes here"; 
    }, 
}; 
window.addEventListener("load", execute.onLoad, true); 

我一直在試圖找出過去4天,現在只是無法得到它。我沒有那麼多的關於javascript和DOM的經驗,(大部分只是java),所以我認爲這對你們中的一些人來說可能相當容易理解。請幫忙。

回答

2

嗯,我得到它的工作。我只花了一個星期的研究,但這不是我們爲什麼喜歡編碼。無論如何,解決方案似乎是使用gMsgCompose,狀態監聽程序,而不是load事件。所以在這裏。

var myStateListener = { 
    init: function(e){ 
     gMsgCompose.RegisterStateListener(myStateListener); 
    }, 
    NotifyComposeFieldsReady: function() { 
    }, 
    NotifyComposeBodyReady: function() { 
     execute.addListener(); 
    }, 
    ComposeProcessDone: function(aResult) { 
    }, 
    SaveInFolderDone: function(folderURI) { 
    } 
}; 

var execute = { 
    addListener: function(){ 
    var addrTextbox = document.getElementById("addressCol2#1"); //"to" field 
    addrTextbox.addEventListener("change", execute.autoFillSubjectLine, false); 
    }, 
    autoFillSubjectLine: function(e){ 
    var msgSubject = document.getElementById("msgSubject"); 
    msgSubject.value = "text goes here"; 
    } 
}; 

window.addEventListener("compose-window-init", myStateListener.init, true);