如何编写Thunderbird扩展(webextension)来修改消息显示?

2024-03-02

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

  • https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_extensions https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_extensions
    已经过时了

  • https://developer.thunderbird.net/ https://developer.thunderbird.net/
    还没有有用的例子

  • https://thunderbird-webextensions.readthedocs.io/ https://thunderbird-webextensions.readthedocs.io/
    也没有例子

一些示例可以在以下位置找到:

  • https://github.com/thundernest/sample-extensions https://github.com/thundernest/sample-extensions

建立在https://github.com/thundernest/sample-extensions/tree/master/messageDisplay https://github.com/thundernest/sample-extensions/tree/master/messageDisplay

我已经修改了背景.js https://github.com/thundernest/sample-extensions/blob/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, not messageDisplay.
The tab is undefined尽管添加了权限

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

但我认为这是因为脚本运行时background.

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

我在哪里可以找到等效的文档

  • https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts

特定于雷鸟?


指定content_scripts在manifest.json中导致“错误:重新加载插件时出错[电子邮件受保护] /cdn-cgi/l/email-protection: 不明确的”。

executeScript() from background即使指定了 tabId,似乎也不起作用。


当您编写问题时,这是不可能的,缺少用于修改显示消息的 API。

截至撰写本文时(2020 年 9 月),browser.messageDisplayScriptsAPI前几天登陆,查看错误 1504475 https://bugzilla.mozilla.org/show_bug.cgi?id=1504475以及相关补丁的示例。它的工作原理如下:您可以像这样注册您的内容脚本(以修改显示的消息)

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

您可以稍后取消注册

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

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

请注意,您的manifest.json需要包括the messagesModify允许为了这个工作。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写Thunderbird扩展(webextension)来修改消息显示? 的相关文章

  • 使用 jquery 远程图像属性

    目前我正在尝试获取远程图像宽度 高度 我正在开发一个链接共享模块 就像当你在 Facebook 上粘贴链接时 你可以看到标题 描述和图像 所以我尝试使用 php getimagesize 来获取图像宽度 高度 但速度非常慢 所以我正在考虑使
  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points

随机推荐

  • 多个派生类的dynamic_cast

    我有一个基类和n派生类 我想实例化一个派生类并将其发送到一个接收基类作为参数的函数 在函数内部 我通过使用dynamic cast找到了它是哪种类型的派生类 但我不想使用几个if else语句 相反 我想知道是否有一种方法可以找出它是哪个派
  • URL 重写未安装在 Windows 10 IIS 10 上

    我的 IIS 上需要 Url Rewrite 模块 但它没有安装 并表示我至少需要 IIS7 较新版本开箱即用支持win10 https www iis net downloads microsoft url rewrite https w
  • 通过 iPython 和伪控制台运行文档测试

    我有一个相当基本的可文档文件 class Foo gt gt gt 3 2 5 if name in main console import doctest doctest testmod verbose True 当直接通过 python
  • Datagridview 更改非空单元格的单元格颜色

    我正在创建一个日历约会应用程序 我想在加载 打开应用程序时更改非空单元格 具有值的单元格 的 datagridview 的颜色 我的应用程序已经处理如何加载数据 我可以更改非空单元格的颜色 但关闭并再次打开后 颜色又恢复为默认值 我不确定语
  • X-Editable 在成功更新后将“空”

    我正在使用 X Editable 插件在表格上进行内联编辑 但遇到了一个恼人的问题 请求成功并更新成功后 插件会在表格单元格上放置 空 而不是正确的更新值 我的网站很安静 所以我正在对 URL 执行 PUT 请求 例如http exampl
  • 如何在 Eclipse Kepler 中添加 Web Tools Platform(WTP)

    我安装了Eclipse Kepler在我的系统中 到目前为止我开发了J2SE应用 现在我想发展J2EE应用程序 所以我需要添加WTP在我的日食中 我尝试添加WTP在已经存在的 eclipse 中 为此 我通过以下方式打开安装对话框并提及Na
  • 如何在 Eclipse 中注释块?

    Eclipse 有评论块的热键吗 并取消注释块 Ctrl to toggle comments and Ctrl Shift to toggle comments At least for Java anyway other tooling
  • 为什么set_xticks不设置刻度的标签?

    import matplotlib pyplot as plt x range 1 7 y 220 300 300 290 320 315 def test axes axes bar x y axes set xticks x i 100
  • 使用 DX Compositor 的 UWP 应用程序实时模糊背景

    因此 UWP 合成支持已经有一段时间了 我正在寻找一种对元素进行实时模糊的方法 在移动或加载时进行实时模糊 而不是静态快照 到目前为止 我一直在 stackoverflow 和 google 上查看一些答案 这导致我使用Lumia 成像 S
  • Android Admob 插页式内存泄漏

    我试图在某些活动结束时显示插页式广告 问题是插页式广告似乎阻止了活动被垃圾收集 从而导致内存不足异常 我该如何解决这个问题 提前致谢 public class AdActivity extends FragmentActivity prot
  • 如何更改日期格式

    我需要将日期格式更改为 dd mm YYYY HH mm ss 目前我得到的是 YYY mm dd HH mm ss 任何人都可以帮我解决这个问题吗 for var course in data if data course days va
  • WCF服务自定义配置

    在托管多个 WCF 服务的应用程序中 为每个服务添加自定义配置信息的最佳方法是什么 例如 您可能想要传递或设置公司名称或指定服务或某些其他参数的连接字符串 我猜想通过实现 IServiceBehavior 这可能是可能的 即类似
  • 创建一个 html 表格,动态扩展列数以适应屏幕尺寸

    我有很长的数据列表 例如 国家及其缩写 我想在 HTML 表中显示 我不想在 2 x 50 表中显示数据 而是希望它在更大的屏幕上更紧凑 这样用户就不必上下滚动 但仍然不必水平滚动 所以这会动态增长 State Ab Alabama AL
  • 试图理解sql查询中的“除了所有”

    我看到这个例子 但我不明白它的意思 SELECT drinker FROM Frequents EXCEPT ALL SELECT drinker FROM Likes 关系 经常 饮酒者 酒吧 喜欢 饮酒者 啤酒 在这种情况下 ALL 会
  • 纯 CSS 中旋转图像背后的纯色背景

    有没有办法可以使用纯 CSS 绘制图像后面的黑色 背景 我确信可以使用 before伪类 但我无法让它发挥作用 我也尝试过使用阴影 但最终结果与我想要达到的效果并不相似 范围及要求 现代浏览器 没有 javascript 没有 jQuery
  • CSS-目标文本链接在悬停时具有底部边框,但图像链接没有边框

    我希望能够在鼠标悬停时使用 border bottom 来定位 CSS 中的文本链接 但所有图像链接在悬停时都没有边框 所以 a href img src image png a gt this should not have a bott
  • 使用 PyYAML 库解析 AWS CloudFormation 模板

    我正在使用 PyYAML 库编写一个自定义 Python 应用程序 该应用程序需要读取 AWS CloudFormation YAML 模板 我知道这些模板是有效的 CloudFormation 模板 因为我使用 validate temp
  • Lego Mindstorm NXT 2.0:“错误:NXT 蓝牙密钥确认失败”

    运行 Windows 7 和 Lego Mindstorms NXT 2 0 IDE Windows 蓝牙管理器显示 NXT 已连接 并且 NXT 显示在 Windows 蓝牙设备列表中 然而 当我尝试从 Lego IDE 进行连接时 我收
  • 通过基类专门化类模板

    我将我的疑问提炼为以下代码 struct base struct derived public base template
  • 如何编写Thunderbird扩展(webextension)来修改消息显示?

    我想为 Thunderbird 编写一个扩展来修改消息显示 例如插入 替换文本 标记 图像 不幸的是 缺少文档 由于最近的更改 https developer mozilla org en US docs Mozilla Thunderbi