J'essaye d'écrire une extension Thunderbird qui vous permettra de composer un message mais il traitera le texte du message avant de l'envoyer. J'ai donc besoin d'accéder au contenu en texte brut du corps de l'e-mail.Comment accéder au contenu du message dans la fenêtre de composition du message de Thunderbird?
Voici ce que j'ai jusqu'à présent, tout comme un code de test dans la console développeur Extension Javascript.
var composer = document.getElementById('msgcomposeWindow');
var frame = composer.getElementsByAttribute('id', 'content-frame').item(0);
if(frame.editortype != 'textmail') {
print('Sorry, you are not composing in plain text.');
return;
}
var doc = frame.contentDocument.documentElement;
// XXX: This does not work because newlines are not in the string!
var text = doc.textContent;
print('Message content:');
print(text);
print('');
// Do a TreeWalker through the composition window DOM instead.
var body = doc.getElementsByTagName('body').item(0);
var acceptAllNodes = function(node) { return NodeFilter.FILTER_ACCEPT; };
var walker = document.createTreeWalker(body, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT, { acceptNode: acceptAllNodes }, false);
var lines = [];
var justDidNewline = false;
while(walker.nextNode()) {
if(walker.currentNode.nodeName == '#text') {
lines.push(walker.currentNode.nodeValue);
justDidNewline = false;
}
else if(walker.currentNode.nodeName == 'BR') {
if(justDidNewline)
// This indicates back-to-back newlines in the message text.
lines.push('');
justDidNewline = true;
}
}
for(a in lines) {
print(a + ': ' + lines[a]);
}
J'aimerais savoir si je suis sur la bonne voie. J'ai aussi quelques questions spécifiques:
- Est-ce que
doc.textContent
n'a pas vraiment de nouvelle ligne? Comme c'est stupide? J'espère que c'est juste un bug avec la console Javascript mais je ne pense pas. - Est-ce que le TreeWalker est correct? J'ai d'abord essayé
NodeFilter.SHOW_TEXT
mais il n'a pas traversé dans les<SPAN>
qui contiennent le matériel cité dans une réponse. De même, il semble drôle deFILTER_ACCEPT
tous les nœuds, puis manuellement le sélectionner plus tard, mais j'ai eu le même problème où si je rejetais un nœudSPAN
, le marcheur ne rentrait pas à l'intérieur. - consécutifs
<BR>
s rompent la mise en œuvre naïve parce qu'il n'y a pas de noeud#text
entre eux. Donc, je les détecte manuellement et pousse les lignes vides sur mon tableau. Est-il vraiment nécessaire de faire autant de travail manuel pour accéder au contenu du message?