按钮未显示在 Firefox WebExtension 通知中

Buttons not showing up in Firefox WebExtension notifications

本文关键字:WebExtension 通知 Firefox 显示 按钮      更新时间:2023-09-26

我正在开发一个Firefox WebExtension,我正在尝试在其中显示带有按钮的通知。我在 Chrome 中工作。根据文档,这在Firefox中是支持的。按钮在通知选项中列为可选。

chrome.notifications.create(notificaitonId, {
        type: "basic",
        iconUrl: chrome.extension.getURL("images/unknown.svg"),
       title: "Blah",
       message: "A Message",
       buttons: [{title: "Get More Details"}]
});

当我运行此代码时,我看到通知。但是,我没有看到按钮。 我错过了什么吗?它实际上不受支持吗?通知的唯一示例不使用按钮,因此没有帮助。

不幸的是,截至 2016 年 3 月 18 日,按钮尚未针对 WebExtension 通知实现。

关于 MDN 的通知选项文档指出 [强调/格式化我的]:

前四个属性 - typeiconUrltitlemessage - 是 在 notifications.create() 中是必需的,在 通知.更新()。火狐目前只支持这些 四个属性

并在浏览器兼容性部分:

火狐只支持:typeiconUrltitlemessage

其中的重要部分("Firefox 目前仅支持这四个属性",Firefox 仅支持:typeiconUrltitlemessage)已添加到 2016-03-07 的文档。因此,如果您查看该日期之前的文档,则不会有任何迹象表明buttons尚未实施。

此外,源代码还有注释:

FIXME:仍然不支持许多选项,尤其是
按钮。

您还可以在浏览器中找到当前用于此目的的源代码:chrome://extensions/content/ext-notifications.js

解决方案:自行实施buttons

在网络扩展中:
也许可以从WebExtensions中自己实现按钮。但是,我对WebExtensions不够熟悉,无法说出是否可能。如果是这样,您可能需要查看为其他类型的 Firefox 附加组件实现通知和通知按钮的源代码。

对于 Firefox,通常:
如果这是我需要的东西,我可能会选择继续为整个 Firefox 实现 buttons 和我需要的任何其他选项,并将代码提交给 Mozilla 进行审查并包含在 Firefox 中。我知道这听起来像是一件大事,也是后方的痛苦,但这真的不应该那么困难。

如果您确实希望对其进行处理,则不应进行任何特殊设置。 实现 WebExtensions 通知的 JavaScript 代码是文件 ext-notifications.js它包含在 omni.ja 文件(只是一个扩展名为 .ja.zip文件)中的 chrome''toolkit''content''extensions 目录中,该文件位于 Firefox 安装目录中。请注意,安装目录层次结构中实际上有 3 个不同的 omni.ja 文件。您想要的位于安装层次结构的根目录中,而不是浏览器webapprt 子目录中

的根目录中。

处理它就像提取该文件一样简单,修改它,制作更新的 omni.ja 文件并将更新的 omni.ja 文件放入发布目录。有一段时间,我每次发布 Firefox 时都会例行公事地这样做,因为我想要一个更长的书签 MRU 文件列表。我最终崩溃了,只是做了一个覆盖扩展,更改书签最近的文件夹列表长度,以替换我正在更改的文件。如果需要,您可以执行相同的操作来实现支持按钮所需的更改。当然,这会导致您当前的扩展依赖于正在安装的另一个扩展,直到代码集成到 Firefox 中为止。但是,这将导致您拥有您现在想要的开发功能,并且该功能进入 Firefox 至少比等待 Mozilla 的其他人实现它要快一些。像这样的覆盖扩展只需要一个 install.rdf 文件、一个两行 chrome.manifest 文件和更新的 ext-notifications.js 您想要覆盖/替换当前文件的文件。