我正试图在消息显示在Thunderbird的主窗口中之前对其进行修改。我似乎找不到1)打开/查看新邮件时将触发的事件2)修改邮件显示内容的方法。
我相信我需要chrome://messenger/content/messenger.xul
覆盖,并且可以使用诸如之类的侦听器
window.addEventListener( "SOME MAGIC HERE", modify_message_handler, true );
但我不确定该事件是什么,以及我将得到什么对象(消息标题?),以及我可以多么容易地修改显示的内容。
所以问题是:
- 我有正确的覆盖层吗
- 这可以通过事件来实现吗?如果没有,怎么办
- 如果是,需要什么事件,它通过什么对象
如果你想要的是类似于Greasemonkey脚本的东西,可以在每条消息上运行,那么你应该:
- 等待
window
的load
事件 - 使用
document.getElementById("messagepane")
检索消息窗格对象 - 将处理程序绑定到消息窗格的
DOMContentLoaded
事件,或类似的事件(如load
),具体取决于您希望何时调用处理程序。DOMContentLoaded
会给你一个Greasemonkey式的行为 - 在事件处理程序中,
event.originalTarget
是与显示的消息相对应的文档。您可以在这里应用所有常见的DOM修改技术
有关更多详细信息,请参阅文档中的此示例。
目前还不清楚您尝试在哪里查找,但我将提供一个建议:这个过时的文档表明存在一个OnItemPropertyChanged事件,您可以利用该事件来侦听"open"属性,该属性似乎是在源中定义的。
然而,这是否只适用于文件夹,还是同时适用于文件夹和邮件,目前尚不清楚;您还需要更深入地了解传入的item对象的属性是否允许您进行更改。
希望能带来一些光明;如果你已经学过了,请告诉我们你学到了什么。
我将主要解决问题中的thunderbird-extension
标记
Thunderbird Extension的作者Paolo"Kaosmos"有许多现成的工具供您考虑。
HeaderToolsLite:
编辑功能(仅更改标题或整个源代码消息的)可以从菜单"message"->中访问"HeaderToolsLite"或从消息面板的上下文菜单中选择。
整个源代码的编辑功能应与注意,因为错误的更改可能会导致显示所有内容时出现问题文件夹中的邮件。
附加额外工具:
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选项GUI:
添加图形界面以处理关于"交付状态"的全局和每个帐户的首选项通知"(DSN)。
有用的链接:
值得注意的参考文献1:修改消息的常见用例strong>值得注意的参考2:消息窗口和消息头的Thunderbird API
值得注意的参考文献3:构建Thunderbird扩展strong>值得注意的参考4:在扩展中使用XUL Thunderbird UI
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
似乎是一个显而易见的元素,但它实际上并没有维护格式(该死的HTML)——使用innerHTML
更适合我的需求。