2012-07-06 6 views
6

Estoy tratando de modificar un mensaje antes de que se muestre en la ventana principal en Thunderbird. Parece que no puedo encontrar 1) Un evento que se activará cuando se abra/vea un mensaje nuevo 2) Una forma de modificar los contenidos mostrados de un mensaje.ThunderBird Evento para ver un mensaje

creo que necesito la superposición chrome://messenger/content/messenger.xul, y puede utilizar un oyente como: (¿una cabecera de mensaje)

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

Pero qué evento es, estoy seguro, junto con qué objeto voy a conseguir y cuán fácilmente puedo modificar lo que se muestra.

Así que las preguntas son:

  • ¿Tengo la superposición correcta?
  • ¿Se puede hacer esto con los eventos? Si no, ¿cómo?
  • En caso afirmativo, ¿qué evento es necesario y qué objeto pasa?
+1

¿Has encontrado https://developer.mozilla.org/en/DOM/DOM_event_reference? –

+0

@ john.k.doe No había visto eso, gracias. –

Respuesta

7

Si lo que quieres es algo similar a un script de Greasemonkey que se ejecutan en cada mensaje, usted debe:

  1. Espere a que el caso de la loadwindow.
  2. Recupere el objeto del panel de mensajes con document.getElementById("messagepane").
  3. Vincule su controlador al evento DOMContentLoaded del panel de mensajes, o eventos similares como load dependiendo de cuándo exactamente desea que se llame su controlador. DOMContentLoaded le dará un comportamiento de estilo Greasemonkey.
  4. En el controlador de eventos, event.originalTarget es el documento correspondiente al mensaje que se muestra. Puede aplicar todas las técnicas de modificación DOM habituales aquí.

Para obtener más información, consulte this example de la documentación.

+0

Ese parece ser el punto de entrada que necesito: lo intentaré (a su debido tiempo) e informaré. Gracias. –

5

No está claro dónde ha intentado buscar todavía, pero voy a ofrecer una sugerencia: this outdated documentation sugiere que hay un evento OnItemPropertyChanged que se puede aprovechar para escuchar la propiedad "abierta", lo que parece se definirá en the source.

Sin embargo, no está claro si esto solo se aplica a carpetas o carpetas y mensajes; y tendrá que cavar más profundo para descubrir si las propiedades del objeto del artículo pasado le permitirán hacer cambios.

Espero que arroje algo de luz; si ya ha hablado de eso, infórmenos qué ha aprendido.

+0

Gracias por los consejos. Informaré pero puede que no sea por algunos días. Estoy haciendo malabares con algunas tareas en este momento. –

+0

Ver mi respuesta http://stackoverflow.com/questions/11370903/thunderbird-event-for-viewing-a-message/11514251#11514251 por lo que encontré. –

3

Direccionaré principalmente la etiqueta thunderbird-extension en su pregunta.

Thunderbird Extension autor Paolo "Kaosmos" tiene muchas herramientas listas para usar para su consideración.


HeaderToolsLite:

Las funciones de edición (cambiando sólo partidas o el código toda fuente del mensaje) son accesibles desde el menú "Mensaje" -> "HeaderToolsLite" o desde el menú contextual en el panel de mensajes.

La función de edición de todo el código fuente se debe utilizar con precaución , porque un cambio incorrecto puede causar problemas al mostrar todos los los mensajes en la carpeta.



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:

una extensión que añade una interfaz gráfica para manejar los preferencias, tanto global como por cuenta, sobre "Estado Entrega Notificación" (DSN ).



Enlaces:
Referencia Notable 1:Common use cases to modify messages
Referencia Notable 2:Thunderbird API for Message Window and Message Header
Referencia Notables 3:Building a Thunderbird Extension
Referencia Notable 4:Using XUL Thunderbird UI in your Extension

1

Humano Genérico me dejó el camino correcto con el enlace mal necesario. Lo primero era agregar un evento load. Voy a pegar una parte del código con mi comprensión muy primitiva:

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

Cuando las cargas de superposición de este script, corren 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); 
     } 
    }, 

En init agrego un oyente que llama onPageLoad cada vez que se visualiza un mensaje. En realidad, no uso el caso appcontent afaik.

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 
    } 
}; 

El doc.body.textContents parecía un elemento obvio, pero en realidad no mantener el formato HTML (maldito) - usando innerHTML funciona mucho mejor para mis necesidades.

Cuestiones relacionadas