我在尝试创建Thunderbird扩展,这是自举/无重启类型之一(我的意思是,javascript代码不是从叠加层运行的,而是监听器触发了各种事件)。
在某个时候,我想在用户决定发送邮件时检查发件人和收件人(“收件人”,“抄送”,“密件抄送”),以便对它们进行一些检查。
我已经设置并工作了许多事件监听器,其中包括一个用于事件的监听器,compose-send-message
当用户确认发送消息后,该事件会正确触发。
在这里,我找不到如何获取发件人电子邮件地址以及所有收件人的电子邮件地址。我尝试了两种:
let fields = components.classes["@mozilla.org/messengercompose/composefields;1"].
createInstance(components.interfaces.nsIMsgCompFields)
与:
let params = components.classes["@mozilla.org/messengercompose/composeparams;1"].
createInstance(components.interfaces.nsIMsgComposeParams);
let fields = params.composeFields;
但无论如何都会fields.hasRecipients
返回false,例如fields.to
为null(或为空,无法精确调用)。看来他们并未被TB设置。
当然,我也在与覆盖扩展相关的TB线程中四处搜寻,但是没有运气。有一个SO线程在这里,这似乎并没有完全回答这个问题,因为它只有大约发件人。
其他参考文献:再次,MozillaZine,TB stdlib。
好吧,多亏了在此mozilla.dev.apps.thunderbird线程和此mozilla.dev.extensions线程上的人们的帮助,我能够从compose-send-message
事件侦听器中访问发送者和接收者。
这是相关的代码...实际上,还有更多:果汁就在里面onComposeSendMessage
:
var windowMediator = components.classes['@mozilla.org/appshell/window-mediator;1'].
getService(components.interfaces.nsIWindowMediator);
var listener = new Listener(windowMediator);
windowMediator.addListener(listener);
function Listener (windowMediator) {
var self = this;
var _mediator = windowMediator;
var _compose = null;
this.onOpenWindow = function (aWindow) {
// [...]
_compose = aWindow.docShell.
QueryInterface(components.interfaces.nsIInterfaceRequestor).
getInterface(components.interfaces.nsIDOMWindow);
_compose.addEventListener('compose-send-message', self.onComposeSendMessage, true);
};
this.onComposeSendMessage = function (event) {
event.currentTarget.removeEventListener(event.type, self.onComposeSendMessage, true);
// event.currentTarget.gMsgCompose <--> _compose.gMsgCompose
// Get sender
log(_compose.gMsgCompose.identity.email); // DEBUG with custom log function
// Get recipients
log(_compose.gMsgCompose.compFields.to); // DEBUG
log(_compose.gMsgCompose.compFields.cc); // DEBUG
log(_compose.gMsgCompose.compFields.bcc); // DEBUG
};
this.onCloseWindow = function () {
_mediator.removeListener(self); // Remove itself, so to not receive message twice
};
// [...]
}
再次感谢所有这些小组的反馈。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句