用于查看消息的ThunderBird事件

时间:2012-07-06 23:27:56

标签: javascript thunderbird thunderbird-addon

我正在尝试在Thunderbird的主窗口中显示之前修改消息。我似乎无法找到1)打开/查看新消息时将触发的事件2)修改消息显示内容的方法。

我相信我需要chrome://messenger/content/messenger.xul叠加层,并且可以使用监听器,例如:

window.addEventListener( "SOME MAGIC HERE", modify_message_handler, true );

但那个事件是什么,我不确定,还有我会得到什么对象(邮件标题?)以及我可以轻松修改显示的内容。

所以问题是:

  • 我有正确的叠加层吗?
  • 这可以用事件来完成吗?如果没有,怎么样?
  • 如果是这样,需要什么事件以及它通过了什么对象?

4 个答案:

答案 0 :(得分:8)

如果你想要的东西类似于每条消息上运行的Greasemonkey脚本,你应该:

  1. 等待load。{/ li>的window事件
  2. 使用document.getElementById("messagepane")检索邮件窗格对象。
  3. 将处理程序绑定到消息窗格的DOMContentLoaded事件或类似load之类的事件,具体取决于您希望何时调用处理程序。 DOMContentLoaded将为您提供Greasemonkey风格的行为。
  4. 在事件处理程序中,event.originalTarget是与显示的消息对应的文档。您可以在此处应用所有常用的DOM修改技术。
  5. 有关详细信息,请参阅文档中的this example

答案 1 :(得分:5)

目前尚不清楚你在哪里寻找,但我会提出一个建议:this outdated documentation建议有一个OnItemPropertyChanged事件,你可以利用它来监听“open”属性,它确实会出现在the source中定义。

这是否仅适用于文件夹或同时适用于文件夹和邮件,目前还不清楚;并且您将需要深入挖掘以确定传入的项目对象的属性是否允许您进行更改。

希望有所启发;如果你已经全身心投入,请告诉我们你所学到的知识。

答案 2 :(得分:3)

我将主要解决您问题中的 thunderbird-extension 标记。

Thunderbird Extension作者Paolo "Kaosmos"有许多可供使用的工具供您考虑。


HeaderToolsLite:

  

编辑功能(仅更改标题或整个源代码   消息)可从“消息”菜单访问 - >   “HeaderToolsLite”或来自消息面板中的上下文菜单。

     

整个源代码的编辑功能应该与。一起使用   谨慎,因为错误的更改可能会导致显示所有问题   文件夹中的消息。



Attach Extra Tools:

attach easily messages selected in the main window<br />
attach attachments from other messages<br />
attach files from 5 favourite directories<br />
attach files and directories in zipped format<br />



DSN OPTIONS GUI:

  

一个扩展,添加了一个图形界面来处理   关于“ 交付状态”的全局和每个帐户的首选项   通知 “( DSN )。



有用的链接:
值得注意的参考1: Common use cases to modify messages
值得注意的参考2: Thunderbird API for Message Window and Message Header
值得注意的参考3: Building a Thunderbird Extension
值得注意的参考4: Using XUL Thunderbird UI in your Extension

答案 3 :(得分:2)

Generic Human通过急需的链接让我走上了正确的道路。首先是添加load事件。我会用我非常原始的理解来粘贴一些代码:

window.addEventListener("load", function load(event) {
        window.removeEventListener("load", load, false);
        myExtension.init();
}, false);

加载此脚本的叠加层时,请运行init

var myExtension = {
  init: function() {
        var appcontent = document.getElementById("appcontent"); // browser app content
        if (appcontent) {
                appcontent.addEventListener("OMContentLoaded", myExtension.onPageLoad, true);
        }
        var messagepane = document.getElementById("messagepane"); // tunderbird message pane
        if(messagepane) {
                messagepane.addEventListener("load", function(event) { myExtension.onPageLoad(event); }, true);
        }
  },

init中,每次显示消息时,我都会添加一个调用onPageLoad的侦听器。我实际上并没有使用appcontent案例。

  onPageLoad: function(aEvent) {
                var doc = aEvent.originalTarget;  // doc is document that triggered "onload" event
                // we can now morph the loaded page
                // doc.location is a 'Location' object
                var newDat = mutateBody(doc.body.innerHTML);
                doc.body.innerHTML = newDat;
                aEvent.originalTarget.defaultView.addEventListener("unload", function(event) { myExtension.onPageUnload(event); }, true);
  },

  onPageUnload: function(aEvent) {
    // No action necessary yet
  }
};

doc.body.textContents似乎是一个显而易见的元素,但它实际上并没有保持格式化(darn HTML) - 使用innerHTML可以更好地满足我的需求。