Событие ThunderBird для просмотра сообщения
Я пытаюсь изменить сообщение до его отображения в главном окне Thunderbird. Кажется, я не могу найти 1) Событие, которое будет инициировано при открытии / просмотре нового сообщения. 2) Способ изменения отображаемого содержимого сообщения.
Я считаю, что мне нужно chrome://messenger/content/messenger.xul
оверлей, и может использовать слушателя, такого как:
window.addEventListener( "SOME MAGIC HERE", modify_message_handler, true );
Но я не уверен, что это за событие, а также какой объект я получу (заголовок сообщения?) И как легко я могу изменить то, что отображается.
Итак, вопросы:
- У меня есть правильное наложение?
- Можно ли это сделать с помощью событий? Если нет, то как?
- Если так, какое событие необходимо и какой объект оно передает?
4 ответа
Если вам нужно что-то похожее на скрипт Greasemonkey, который будет запускаться для каждого сообщения, вам следует:
- Ждать
load
событиеwindow
, - Получить объект панели сообщений с помощью
document.getElementById("messagepane")
, - Свяжите ваш обработчик с панелью сообщений
DOMContentLoaded
событие или аналогичные события, такие какload
в зависимости от того, когда именно вы хотите, чтобы ваш обработчик был вызван.DOMContentLoaded
даст вам поведение в стиле Greasemonkey. - В обработчике событий
event.originalTarget
является документом, соответствующим отображаемому сообщению. Вы можете применить все обычные методы модификации DOM здесь.
Для получения дополнительной информации см. Этот пример из документации.
Пока не ясно, где вы пытались искать, но я предложу предложение: эта устаревшая документация предполагает наличие события OnItemPropertyChanged, к которому можно подключиться, чтобы прослушать свойство "open", которое, по-видимому, определено в источник.
Однако неясно, относится ли это только к папкам или к папкам и сообщениям; и вам придется копать глубже, чтобы узнать, позволят ли свойства переданного объекта item внести изменения.
Надеюсь, что проливает свет; если вы уже прошли через это, пожалуйста, дайте нам знать, что вы узнали.
Я прежде всего обращусь к thunderbird-extension
Отметьте в своем вопросе.
Автор расширения Thunderbird Паоло "Kaosmos" имеет много готовых инструментов для вашего рассмотрения.
Функции редактирования (изменение только заголовков или всего исходного кода сообщения) доступны из меню "Сообщение" -> "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).
Полезные ссылки:
Заметная ссылка 1. Общие варианты использования для изменения сообщений
Примечательная ссылка 2: Thunderbird API для окна сообщений и заголовка сообщения
Заметная ссылка 3: Создание расширения Thunderbird
Примечательная ссылка 4: Использование пользовательского интерфейса XUL Thunderbird в вашем расширении
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
работает намного лучше для моих нужд.