Расширение Thunderbird, событие загрузки происходит только один раз - PullRequest
1 голос
/ 14 сентября 2011

Я пытаюсь написать расширение для автозаполнения строки темы исходящего сообщения.

Следующий код кажется выполненным только один раз.Он связан с наложением chrome: //messenger/content/messengercompose/messengercompose.xul, которое открывается, когда пользователь нажимает кнопку записи, чтобы написать новое сообщение.При первом нажатии кнопки ввода и ввода текста в поле «to» строка темы заполняется автоматически.Однако, если я закрою окно «compose» и выведу новое, у него не будет зарегистрированного прослушивателя событий в поле «to».

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 Ответ

2 голосов
/ 18 сентября 2011

Ну, я получил его на работу.Только заняло у меня около недели исследований, но не потому, что мы любим кодировать.В любом случае, решение, по-видимому, заключается в использовании 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);
...