Событие ThunderBird для просмотра сообщения
Я пытаюсь изменить сообщение, прежде чем оно отобразится в главном окне Thunderbird. Я не могу найти 1) событие, которое будет инициировано при открытии/просмотре нового сообщения 2) способ изменения отображаемого содержимого сообщения.
Я считаю, что мне нужно chrome://messenger/content/messenger.xul
overlay, и может использовать прослушиватель, такой как:
window.addEventListener( "SOME MAGIC HERE", modify_message_handler, true );
но что это за событие, я не уверен, что объект я получу (в заголовке сообщения?) и как легко я могу изменить то, что отображается.
поэтому вопросы:
- есть ли у меня правильное наложение?
- можно ли это сделать с событиями? Если нет, то как?
- если да, то какое событие нужно и какой объект оно проходит?
4 ответов
если вы хотите что-то похожее на сценарий Greasemonkey, который будет работать на каждом сообщении, вы должны:
- ждать
load
событиеwindow
. - получить объект панели сообщений с
document.getElementById("messagepane")
. - привязать обработчик к панели сообщений
DOMContentLoaded
событие или подобные события, такие какload
в зависимости от того, когда именно вы хотите, чтобы ваш обработчик должен быть вызван.DOMContentLoaded
даст вам поведение в стиле Greasemonkey. - In обработчик события
event.originalTarget
- документ, соответствующий отображаемому сообщению. Здесь вы можете применить все обычные методы модификации DOM.
дополнительные сведения см. В разделе из документации.
пока не ясно, где вы пытались искать, но я предложу предложение:эта устаревшая документация предполагает, что существует событие OnItemPropertyChanged, к которому вы можете подключиться, чтобы прослушать свойство "open", которое, по-видимому, определено в источник.
применяется ли это только к папкам или обеим папкам и сообщениям, неясно; и вам придется копать глубже, чтобы узнать, будут ли свойства переданного объекта элемента позволяет вносить изменения.
надеюсь, что проливает свет; если вы уже были во всем этом, пожалуйста, сообщите нам, что вы узнали.
Я в первую очередь обращусь к 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 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
работает гораздо лучше для моих нужд.