2009-03-20 5 views
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ノードがないため、単純な実装を破ります。だから私は手動でそれらを検出し、私の配列の空の行を押してください。メッセージコンテンツにアクセスするには、多くの手動作業が必要ですか?

答えて

5

まあ、一度に誰もがチャイムしないでください!

私はこれをmozilla.dev.extensions threadとして掲載しましたが、実りある議論がありました。私はVenkmanで遊んでいましたが、解決策はDOM/DHTMLの習慣を捨て、正しいAPIに書き込むことです。

ここでtextには、作成される電子メール本文の平文バージョンがあります。

関連する問題