1

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

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

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

4

1 回答 1

4

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

MDN 上的NotificationOptions 文档指出 [强调/格式化我的]:

前四个属性 - type, iconUrl, title, message- 在 notifications.create() 中是必需的,在notifications.update()是可选的 。Firefox 目前只支持这四个属性

并在浏览器兼容性部分

Firefox 仅支持:type, iconUrl, title, message.

其中的重要部分(“Firefox 当前仅支持这四个属性”和 Firefox 仅支持:、、、、。type)已添加到 2016-03-07 的文档中。因此,如果您在该日期之前查看了文档,则没有任何迹象表明尚未实施。iconUrltitlemessagebuttons

另外,源码有注释:

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

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

解决方案:实现buttons自己:

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

对于 Firefox,一般来说:
如果这是我需要的东西,我可能会选择继续buttons为整个 Firefox 实施 ,以及我需要的任何其他选项,并将代码提交给 Mozilla 以供审查并包含在 Firefox 中。我知道这听起来可能很重要,而且很痛苦,但它真的不应该那么困难。

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

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

于 2016-03-18T13:19:10.510 回答