2012-04-06 76 views
3

我们开发了一个Thunderbird(11)插件,它允许我们将消息内容保存到磁盘。现在我们正在扩展此扩展,以便在关闭消息时自动处理消息。我们遇到以下几个问题:关闭消息选项卡/窗口时访问Thunderbird消息

我们无法找到钩入“关闭标签”事件的方式。我们在获取当前打开的标签的消息URI时也遇到了问题(我们正在尝试捕获点击和键盘事件)。此信息似乎不可用于选项卡容器的DOM中。

有一种方法与检索用于进一步处理所述闭合邮件消息的URI来检测邮件消息标签页或窗口的封闭在一个通用的方法,一起?

我们已经看了看标签容器的文档中,NsIWindowMediator,尝试了各种事件侦听器,但至今没有运气。

编辑:我们正在使用最近关闭的标签列表获得一些结果。不是一个非常优雅的解决方案,但至少我们有一个参考标签。现在,我们只需将URI包含在选项卡中的消息中。

回答

4

我们能不能找到一种方法来挂接到一个“关闭标签”事件。

badly documented<tabmail>元素允许注册选项卡监视器。像这样的东西应该工作:

var tabmail = document.getElementById("tabmail"); 
var monitor = { 
    onTabClosing: function(tab) 
    { 
    ... 
    } 
}; 
tabmail.registerTabMonitor(monitor); 

我们也遇到麻烦当前打开的选项卡

<tabmail>元件,在当前打开的选项卡的属性tabInfo包含信息的邮件URI。您可能只想查看mode.name"message"(还有一些其他模式,例如"folder""contentTab")的选项卡。这种模式有一个getBrowser()方法,所以这样的事情应该做的:

var tabmail = document.getElementById("tabmail"); 
for (var i = 0; i < tabmail.tabInfo.length; i++) 
{ 
    var tab = tabmail.tabInfo[i]; 
    if (tab.mode.name == "message") 
    alert(tab.mode.getBrowser().currentURI.spec); 
} 

编辑:正如彼得在评论中指出,这种方法得到的URI的消息只会工作,当前加载的消息 - 所有选项卡重复使用相同的浏览器元素作为邮件消息。获取URI正确比较复杂,你必须通过TabInfo.folderDisplay.selectedMessage得到nsIMsgDBHdr instance的消息,然后用nsIMsgFolder.getUriForMsg()构建URI吧:

var tabmail = document.getElementById("tabmail"); 
for (var i = 0; i < tabmail.tabInfo.length; i++) 
{ 
    var tab = tabmail.tabInfo[i]; 
    if (tab.mode.name != "message") 
    continue; 
    var message = tab.folderDisplay.selectedMessage; 
    alert(message.folder.getUriForMsg(message)); 
} 
+0

谢谢,这看起来很有前途! – 2012-04-16 20:24:42

+0

第二部分(getBrowser.currentURI.spec)不起作用,因为所有消息/文件夹选项卡使用相同的浏览器对象。 (getBrowser :(函数(aTab)){//消息标签总是使用消息窗格浏览器 return document.getElementById(“messagepane”); })) – Peter 2014-07-21 11:05:47

+0

@Peter:你说得对,邮件总是加载到相同的浏览器,所以这种方法只会给你当前打开的邮件的URI。我已经用适当的方式更新了我的答案以获取URI。 – 2014-07-21 13:12:41

0

对于问题的第二部分:

的下面的示例代码将为您提供所有打开的选项卡的msgDBHdr对象。您应该对类型进行一些检查以避免在日历选项卡中访问邮件。):

tabInfos = window.document.getElementById("tabmail").tabInfo; 
for (i = 0; i < tabInfos.length; i++) {  
    msgHdr = tabInfos[i].folderDisplay.selectedMessage; 
    alert(
    msgHdr.mime2DecodedSubject+"\n" 
    +msgHdr.messageId+"\n" 
    +"in view type "+tabInfos[i].mode.type 
); 
} 

tabinfo条目还有一些有趣的信息。只需打开ErrorConsole并运行

top.opener.window.document.getElementById("tabmail").tabInfo[0].toSource() 

并仔细阅读它。