【问题标题】:ThunderBird Event for Viewing a Message用于查看消息的 ThunderBird 事件
【发布时间】:2012-07-07 10:13:33
【问题描述】:

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

我相信我需要chrome://messenger/content/messenger.xul 覆盖,并且可以使用如下监听器:

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

但我不确定该事件是什么,以及我将获得什么对象(消息头?)以及修改显示内容的难易程度。

所以问题是:

  • 我有正确的叠加层吗?
  • 这可以通过事件来完成吗?如果没有,怎么办?
  • 如果需要,需要什么事件,传递什么对象?

【问题讨论】:

标签: javascript thunderbird thunderbird-addon


【解决方案1】:

如果您想要的是类似于在每条消息上运行的 Greasemonkey 脚本,您应该:

  1. 等待windowload 事件。
  2. 使用document.getElementById("messagepane") 检索消息窗格对象。
  3. 将您的处理程序绑定到消息窗格的DOMContentLoaded 事件或类似load 的事件,具体取决于您希望何时调用处理程序。 DOMContentLoaded 会给你一个 Greasemonkey 风格的行为。
  4. 在事件处理程序中,event.originalTarget是显示消息对应的文档。您可以在此处应用所有常用的 DOM 修改技术。

有关详细信息,请参阅文档中的this example

【讨论】:

  • 这似乎是我需要的切入点 - 我会试一试(在适当的时候)并报告。谢谢。
【解决方案2】:

目前尚不清楚您尝试查看的位置,但我会提供一个建议:this outdated documentation 建议您可以利用 OnItemPropertyChanged 事件来侦听“open”属性,这似乎是在the source中定义。

但这是否仅适用于文件夹或同时适用于文件夹和消息尚不清楚;并且您必须更深入地了解传入的项目对象的属性是否允许您进行更改。

希望能有所启发;如果您已经经历过这些,请告诉我们您学到了什么。

【讨论】:

【解决方案3】:

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

Thunderbird 扩展作者 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

【讨论】:

    【解决方案4】:

    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 案例 afaik。

      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 似乎是一个显而易见的元素,但它实际上并没有保持格式(该死的 HTML) - 使用 innerHTML 可以更好地满足我的需求。

    【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2021-01-20
    • 2023-04-03
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多