4
メッセージを作成するThunderbird拡張機能を作成しようとしていますが、送信する前にメッセージテキストを処理します。だから私は電子メール本文のプレーンテキストの内容にアクセスする必要があります。Thunderbirdのメッセージ作成ウィンドウでメッセージコンテンツにどのようにアクセスしますか?
ここまでは、Extension Developer 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]);
}
私が正しいトラックにいるかどうかについてのフィードバックはありがたいです。
doc.textContent
には実際に改行がありませんか?どのように愚かなのですか?私はそれがJavascriptコンソールのバグだと思っていますが、私はそうは思わない。- TreeWalkerは正しいですか?私は最初に
NodeFilter.SHOW_TEXT
を試しましたが、返信に引用された資料を含む<SPAN>
には行きませんでした。同様に、それはFILTER_ACCEPT
すべてのノードに面白そうだし、手動で後でそれを選んでチェリー - ピック - 私はSPAN
ノードを拒否した場合、歩行者は内側にステップしない同じ問題があった。 - 連続した
<BR>
は、その間に#text
ノードがないため、単純な実装を破ります。だから私は手動でそれらを検出し、私の配列の空の行を押してください。メッセージコンテンツにアクセスするには、多くの手動作業が必要ですか?