Thunderbird扩展,加载事件似乎只发生一次

时间:2011-09-14 09:22:44

标签: javascript dom xul

我正在尝试编写一个扩展名来自动填充外发邮件的主题行。

以下代码似乎只执行一次。它链接到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)没有那么多经验,所以我认为这对于你们中的一些大师来说可能相当容易理解。请帮忙。

1 个答案:

答案 0 :(得分:2)

嗯,我得到了它的工作。我只花了一个星期的研究时间,但这并不是我们喜欢编码的原因。无论如何,解决方案似乎是使用gMsgCompose,状态监听器和compose-window-init事件而不是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);