【问题标题】:Thunderbird extension. Add field to messagePane. How to deal with windows instances?雷鸟扩展。向 messagePane 添加字段。如何处理windows实例?
【发布时间】:2011-02-23 10:06:02
【问题描述】:

我正在开发 TB 扩展程序。我已在“来自、主题、至”字段下方的 messagePane 中添加了字段。 所以我需要正确更新字段值。我从 msgHdr 获得价值。我目前的方法是监听 messagePane 文档的“加载”事件。当在 TB 中只打开一条消息时,它工作正常。 但是如果有多个打开的消息,那么每个消息窗口都会获得相同的字段值,因为每个窗口都会触发最后加载消息的“加载”事件。这是错误。 当我收到加载事件时,如何确定窗口中打开的消息的 msgHdr?它存储在某个地方吗? Windows 是否有任何身份信息,如句柄、uri 或其他内容?为什么 DOM 检查器只显示我的字段的一个 DOM 节点,而它存在于每个 messagePane 中?很抱歉有一堆问题,我只是无法理解 TB 窗口的整个混乱情况。

谢谢。

【问题讨论】:

  • 与 Firefox 的选项卡式浏览器不同,选项卡式消息窗格实际上只是一个浏览器,当您切换选项卡时,它只会重新加载上次加载到该选项卡中的消息。
  • 难以置信。我怀疑我的面向对象的思想是否可以自己丰富这一点。

标签: xul thunderbird thunderbird-addon


【解决方案1】:

消息窗口具有全局变量 gMessageDisplay,它具有 displayMessage 属性。 displayMessage 是当前显示的消息的nsIMsgDBHdr。

为了在显示新消息时获得通知,我建议在 gMessageListeners 中添加一个监听器:

gMessageListeners.push({
  onStartHeaders: function () {},
  onEndHeaders: function () {},
  onEndAttachments: function () {},
  onBeforeShowHeaderPane: function () {}
});

在 onStartHeaders 或 onEndHeaders 中采取行动。

【讨论】:

  • 我发现 document.getElementById("messagepane").contentDocument.URL 正是我需要的。现在我想听听这些东西的每一个变化。怎么做?我想我可以收听 contentDocument 加载事件。但是 contentDocument 本身并不是永久的,所以我可能需要听 contentDocunt 的变化。怎么做?
  • 或者我可以简单地听显示消息的变化。但我还是不知道该怎么做。
  • 我扩展了我的答案。希望对您有所帮助。
  • 很酷。我在 sgHeaderViewOverlay.js 中多次遇到这些回调,但完全错过了 gMessageListeners。你让我免于紧张。谢谢。
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多