gpt4 book ai didi

javascript - 如何访问 Thunderbird 消息撰写窗口中的消息内容?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:32 26 4
gpt4 key购买 nike

我正在尝试编写一个 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> s 其中包含回复中引用的 Material 。同样,FILTER_ACCEPT 似乎很有趣每个节点,然后稍后手动选择它,但我遇到了同样的问题,如果我拒绝了 SPAN节点,步行者不会进入。
  • 连续<BR>因为没有 #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)

现在 text 具有正在编写的电子邮件正文的纯文本版本。

关于javascript - 如何访问 Thunderbird 消息撰写窗口中的消息内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com