Событие ThunderBird для просмотра сообщения

Я пытаюсь изменить сообщение, прежде чем оно отобразится в главном окне Thunderbird. Я не могу найти 1) событие, которое будет инициировано при открытии/просмотре нового сообщения 2) способ изменения отображаемого содержимого сообщения.

Я считаю, что мне нужно chrome://messenger/content/messenger.xul overlay, и может использовать прослушиватель, такой как:

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

но что это за событие, я не уверен, что объект я получу (в заголовке сообщения?) и как легко я могу изменить то, что отображается.

поэтому вопросы:

  • есть ли у меня правильное наложение?
  • можно ли это сделать с событиями? Если нет, то как?
  • если да, то какое событие нужно и какой объект оно проходит?

4 ответов


если вы хотите что-то похожее на сценарий Greasemonkey, который будет работать на каждом сообщении, вы должны:

  1. ждать load событие window.
  2. получить объект панели сообщений с document.getElementById("messagepane").
  3. привязать обработчик к панели сообщений DOMContentLoaded событие или подобные события, такие как load в зависимости от того, когда именно вы хотите, чтобы ваш обработчик должен быть вызван. DOMContentLoaded даст вам поведение в стиле Greasemonkey.
  4. In обработчик события event.originalTarget - документ, соответствующий отображаемому сообщению. Здесь вы можете применить все обычные методы модификации DOM.

дополнительные сведения см. В разделе из документации.


пока не ясно, где вы пытались искать, но я предложу предложение:эта устаревшая документация предполагает, что существует событие OnItemPropertyChanged, к которому вы можете подключиться, чтобы прослушать свойство "open", которое, по-видимому, определено в источник.

применяется ли это только к папкам или обеим папкам и сообщениям, неясно; и вам придется копать глубже, чтобы узнать, будут ли свойства переданного объекта элемента позволяет вносить изменения.

надеюсь, что проливает свет; если вы уже были во всем этом, пожалуйста, сообщите нам, что вы узнали.


Я в первую очередь обращусь к thunderbird-extension тег в ваш вопрос.

автор расширения Thunderbird Паоло "Kaosmos" есть много готовых к использованию инструментов для вашего рассмотрения.


HeaderToolsLite:

функции редактирования (только изменение заголовков или весь исходный код из сообщения) доступны из меню "сообщения" -> "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: общие случаи использования для изменения сообщений
заметные Ссылка 2: Thunderbird API для окна сообщения и заголовка сообщения
Примечательная Ссылка 3: создание расширения Thunderbird
Примечательная Ссылка 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 работает гораздо лучше для моих нужд.