按钮未显示在 Firefox WebExtension 通知中

Buttons not showing up in Firefox WebExtension notifications

我正在开发 Firefox WebExtension,我试图在其中显示带有按钮的通知。我在 Chrome 工作。根据 docs, this is supported in Firefox. Buttons are listed as Optional in the NotificationOptions.

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

当我 运行 这段代码时,我看到了通知。但是,我没有看到按钮。我错过了什么吗?真的不支持吗?唯一的 example for notifications 不使用按钮,所以没有帮助。

遗憾的是,自 2016 年 3 月 18 日起,按钮尚未针对 WebExtension 通知实现。

NotificationOptions documentation on MDN 声明 [emphasis/formatting 我的]:

The first four properties - type, iconUrl, title, message - are mandatory in notifications.create(), and optional in notifications.update(). Firefox currently supports only these four properties.

并在 Browser compatibility section:

Firefox only supports: type, iconUrl, title, message.

这个的重要部分("Firefox currently supports only these four properties" 和 Firefox 仅支持:typeiconUrltitlemessage。)是 added to the documentation on 2016-03-07.因此,如果您查看该日期之前的文档,则不会有任何迹象表明 buttons 尚未实施。

此外,source code有评论:

// FIXME: Lots of options still aren't supported, especially
// buttons.

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

解决方案:自己实施buttons

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

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

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

处理它就像提取该文件一样简单,修改它,制作更新的 omni.ja 文件并将更新的 omni.ja 文件放入发布目录。有一段时间,我在每次发布 Firefox 时都会例行公事地这样做,因为我想要一个更长的书签 MRU 文件列表。我最终崩溃了,只是做了一个覆盖扩展,Change Bookmark Recent Folder List Length, to replace the file I was making changes to. If you want, you could do the same thing to implement the changes needed to support buttons. That would, of course, result in your current extension being dependent on the other one being installed until such time as the code was integrated into Firefox. But, it would result in both your having the functionality you desire now for your development, and the functionality getting into Firefox at least somewhat faster than waiting for someone else at Mozilla to implement it. An overlay extension like that just takes a install.rdf file, a two line chrome.manifest 文件和更新的 ext-notifications.js 文件你想要 override/replace 在当前一.