2012-07-06 8 views
6

Sto tentando di modificare un messaggio prima che venga visualizzato nella finestra principale in Thunderbird. Non riesco a trovare 1) Un evento che verrà attivato quando un nuovo messaggio viene aperto/visualizzato 2) Un modo per modificare i contenuti visualizzati di un messaggio.Evento ThunderBird per la visualizzazione di un messaggio

credo che ho bisogno del chrome://messenger/content/messenger.xul sovrapposizione, e posso usare un ascoltatore come ad esempio: (? L'intestazione del messaggio)

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

Ma ciò che quell'evento è, non sono sicuro, insieme a quello oggetto mi metterò e con quanta facilità posso modificare ciò che viene visualizzato.

Quindi le domande sono:

  • Devo la sovrapposizione corretta?
  • Questo può essere fatto con gli eventi? Se no, come?
  • Se sì, quale evento è necessario e quale oggetto passa?
+1

hai trovato https://developer.mozilla.org/en/DOM/DOM_event_reference? –

+0

@ john.k.doe Non l'avevo visto, grazie. –

risposta

7

Se quello che vuoi è qualcosa di simile a uno script Greasemonkey che avrebbe eseguito su ogni messaggio, è necessario:

  1. Attendere il load caso di window.
  2. Recupera l'oggetto del riquadro dei messaggi con document.getElementById("messagepane").
  3. Associare l'handler all'evento DOMContentLoaded del riquadro messaggi o eventi simili come load a seconda di quando si desidera chiamare esattamente il gestore. DOMContentLoaded ti darà un comportamento in stile Greasemonkey.
  4. Nel gestore eventi, event.originalTarget è il documento corrispondente al messaggio visualizzato. Puoi applicare tutte le usuali tecniche di modifica DOM qui.

Per maggiori dettagli, vedere this example dalla documentazione.

+0

Questo sembra essere il punto di accesso di cui ho bisogno - ci provo (a tempo debito) e riferisco. Grazie. –

5

Non è chiaro dove hai provato cercando ancora, ma ti offro un suggerimento: this outdated documentation suggerisce c'è un evento OnItemPropertyChanged che si potrebbe attingere per ascoltare per la proprietà "aperta", che non sembra essere definito in the source.

Se questo si applica solo alle cartelle o entrambe le cartelle e i messaggi, tuttavia, non è chiaro; e dovrai scavare più a fondo per scoprire se le proprietà dell'oggetto oggetto passato ti permetteranno di apportare modifiche.

Spero che getti un po 'di luce; se hai già fatto tutto questo, facci sapere cosa hai imparato.

+0

Grazie per i suggerimenti. Riferirò indietro ma potrebbe non essere per alcuni giorni - sto facendo alcuni compiti in questo momento. –

+0

Vedere la mia risposta http://stackoverflow.com/questions/11370903/thunderbird-event-for-viewing-a-message/11514251#11514251 per quello che ho trovato. –

3

Mi occuperò principalmente del tag thunderbird-extension nella domanda.

Autore di estensione di Thunderbird Paolo "Kaosmos" ha molti strumenti pronti per l'uso.


HeaderToolsLite:

Le funzioni di modifica (cambiando solo voci e il codice intera sorgente del messaggio) sono accessibili dal menu "Messaggio" -> "HeaderToolsLite" oppure dal menu contestuale nel pannello dei messaggi.

La funzione di modifica dell'intero codice sorgente deve essere utilizzata con cautela , perché una modifica errata può causare problemi nella visualizzazione di tutti i messaggi nella cartella.



Attach Extra Tools:

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 OPTIONS GUI:

un'estensione che aggiunge un'interfaccia grafica per gestire i preferenze, sia globali che per account, di "Stato consegna Notifica" (DSN).



Link utili:
Notevole Riferimento 1:Common use cases to modify messages
Notevole Riferimento 2:Thunderbird API for Message Window and Message Header
Notevole Riferimento 3:Building a Thunderbird Extension
Notevole Riferimento 4:Using XUL Thunderbird UI in your Extension

1

umana generica mi depose la strada giusta con il link male necessario. La prima cosa è stata aggiungere un evento load. Io incollo una parte del codice con la mia comprensione molto primitivo:

window.addEventListener("load", function load(event) { 
     window.removeEventListener("load", load, false); 
     myExtension.init(); 
}, false); 

Quando i carichi di sovrapposizione di questo script, lanciato 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); 
     } 
    }, 

In init aggiungo un ascoltatore che chiama onPageLoad ogni volta che viene visualizzato un messaggio. In realtà non utilizzo il caso 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 
    } 
}; 

Il doc.body.textContents sembrava un elemento ovvio, ma in realtà non ha mantenuto la formattazione (maledettamente HTML) - utilizzando innerHTML funziona molto meglio per le mie esigenze.