【问题标题】:How to write a Thunderbird extension (webextension) to modify the message display?如何编写一个Thunderbird扩展(webextension)来修改消息显示?
【发布时间】:2020-04-20 03:51:50
【问题描述】:

我想为 Thunderbird 编写一个扩展来修改消息显示(例如插入/替换文本/标记/图像)。
不幸的是,缺少文档(由于最近的更改?)。

一些例子可以在

找到

基于https://github.com/thundernest/sample-extensions/tree/master/messageDisplay

我修改了background.js

browser.messageDisplay.onMessageDisplayed.addListener((tabId, message) => {
  console.log(`Message displayed in tab ${tabId}: ${message.subject}`);
  console.log(message.id);
  browser.messages.getFull(message.id).then((messagepart) => {
      console.log(messagepart);
      body = messagepart['parts'][0]['parts'][0]['body'];
      console.log(body);
      body += "modified!";
      console.log(body);
  });
  browser.windows.getCurrent().then((window)=>{
    console.log(window.type);
  });

  browser.tabs.getCurrent().then((tab)=>{
    console.log("tab",tab);
  });
});

这为我提供了消息正文(使用魔术索引),但预期更改不会反映在消息显示中。
返回的窗口类型是normal,而不是messageDisplay
tabundefined 尽管添加了权限

  "permissions": [
    "messagesRead",
    "activeTab",
    "tabs",
    "tabHide"
  ],

但我认为这是因为脚本以 background 运行。

所以我需要在内容上运行脚本/访问选项卡,然后提供一些关于如何修改显示的消息内容的提示(我不想修改消息)。

我在哪里可以找到与

等效的文档

特定于 Thunderbird?


在 manifest.json 中指定 content_scripts 会导致“错误:重新加载插件时出错 messageDisplay@sample.extensions.thunderbird.net:未定义”。

来自backgroundexecuteScript() 似乎也不起作用,即使指定了tabId。

【问题讨论】:

  • Background.js 在后台运行只是为了添加监听器;我认为你的听众在前台运行。那么您要做的是用您的正文变量替换显示的消息?我看到了一个 getDisplayedMessage 函数,但不是一个集合,所以看起来这是不可能的。 Content_scripts 是将您的脚本加载到页面上,这样应该可以工作 - 也许您的清单中的文件名存在拼写错误。既然你有当前标签的 tabID,为什么不调用 get(tabID) 而不是 getCurrent()。

标签: javascript thunderbird thunderbird-webextensions


【解决方案1】:

当你写你的问题时这是不可能的,用于修改显示消息的 API 丢失了。

截至撰写本文时(2020 年 9 月),browser.messageDisplayScripts API 已于几天前发布,请参阅 bug 1504475 和相关补丁以获取示例。它的工作原理如下:您可以像这样注册您的内容脚本(以修改显示的消息)

let myPromise = browser.messageDisplayScripts.register({
    css: [{
        file: "/style.css",
    }],
    js: [{
        file: "/content_script.js",
    }],
});

您可以稍后取消注册

myPromise.then((script) => { script.unregister(); });

您只需要为所有消息注册一次脚本(您不需要在每次显示消息时都会加载它的侦听器)。

请注意,您的 manifest.json 需要包含 messagesModify 权限才能使其正常工作。

新的 API 将在 Thunderbird 版本 82 中,所以如果我正确理解发布过程,它应该在稳定版本 88 中(除非它在此之前被反向移植)。您已经可以尝试了(v82 是当前的 EarlyBird)。

【讨论】:

    【解决方案2】:

    文档https://thunderbird-webextensions.readthedocs.io/en/68/tabs.html#getcurrent 说:

    如果从非选项卡上下文(例如:背景页面或弹出视图)调用,则可能未定义。

    由于未从选项卡上下文调用 background.js,因此选项卡未定义。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多