我正在尝试编写一个扩展名来自动填充外发邮件的主题行。
以下代码似乎只执行一次。它链接到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)没有那么多经验,所以我认为这对于你们中的一些大师来说可能相当容易理解。请帮忙。
答案 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);