编程语言
首页 > 编程语言> > javascript – 如何在Thunderbird消息撰写窗口中访问消息内容?

javascript – 如何在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> s打破了朴素的实现,因为它们之间没有#text节点.所以我手动检测它们并在我的阵列上推空线.是否真的有必要做那么多手动工作来访问消息内容?

解决方法:

好吧,不是每个人都会立刻进入!

我把它发布为mozilla.dev.extensions thread并且进行了一些富有成果的讨论.我一直在Venkman玩,解决方案是抛弃我的DOM / DHTML习惯并写入正确的API.

var editor = window.gMsgCompose.editor;

// 'text/html' works here too
var text = editor.outputToString('text/plain', editor.eNone)

现在,文本具有正在撰写的电子邮件正文的纯文本版本.

标签:javascript,xul,thunderbird
来源: https://codeday.me/bug/20190622/1260611.html