Firefox WebExtension notifications API:点击通知时如何调用函数

时间:2016-06-09 08:09:27

标签: firefox firefox-addon firefox-webextensions

我正在尝试使用WebExtensions开发Firefox添加。我尝试做的是在用户点击通知时打开一个新的Firefox选项卡或窗口。但它没有用。

当我点击通知时,没有任何反应。

我正在创建以下通知:



var q = chrome.notifications.create({
		"type": "basic",
		"iconUrl": chrome.extension.getURL("128-128q.png"),
		"title": 'title',
		"message": 'content'
	});
	
chrome.notifications.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
browser.notifications.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
	
q.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
	
var audio = new Audio('message.mp3');
audio.play();




我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

问题似乎是您尝试以不起作用的方式打开新网址。

以下应该可以使用chrome.tabs.create()

var q = chrome.notifications.create("MyExtensionNotificationId", {
        "type": "basic",
        "iconUrl": chrome.extension.getURL("128-128q.png"),
        "title": 'title',
        "message": 'content'
    });

chrome.notifications.onClicked.addListener(function(notificationId) {
    chrome.tabs.create({url:"http://www.google.com"});
});

但是,您需要在Firefox 47.0+中对此进行测试,因为最近才添加对chrome.notifications.onClicked()的支持。我对Firefox 47.0+的陈述基于兼容性表。但是,兼容性表至少有一个明确的错误。因此,可能需要更高版本的Firefox。我测试的代码在Firefox Nightly,版本50.0a1中工作,但在Firefox Developer Edition,版本48.0a2中无法正常工作。通常,假设WebExtensions API处于活动开发阶段,如果您遇到的问题/问题无法按预期运行,则应该针对Firefox Nightly进行测试。您还可以查看API的source code,了解实际执行的内容以及添加时间。

注意:这适用于chrome.notifications.onClickedbrowser.notifications.onClicked。但是,不要同时使用它们来添加两个单独的匿名函数,这些函数执行相同的操作会导致您执行两次任何操作。

我实际上没有使用您的代码对其进行测试,但我确实使用notify-link-clicks-i18n WebExtensions example的修改版本对其进行了测试。我将该示例中的 background-script.js 文件修改为:

/*
Log that we received the message.
Then display a notification. The notification contains the URL,
which we read from the message.
*/
function notify(message) {
    console.log("notify-link-clicks-i18n: background script received message");
    var title = chrome.i18n.getMessage("notificationTitle");
    var content = chrome.i18n.getMessage("notificationContent", message.url);
    let id = "notify-link-clicks-i18n::" + title + "::" + message.url;
    chrome.notifications.create(id,{
        "type": "basic",
        "iconUrl": chrome.extension.getURL("icons/link-48.png"),
        "title": title,
        "message": content
    });
}

/*
Assign `notify()` as a listener to messages from the content script.
*/
chrome.runtime.onMessage.addListener(notify);

//Add the listener for clicks on a notification:
chrome.notifications.onClicked.addListener(function(notificationId) {
    console.log("Caught notification onClicked with ID:" + notificationId);
    //Open a new tab with the desired URL:
    browser.tabs.create({url:"http://www.google.com"});
});

我喜欢这样的地方,其中唯一的ID is possible是提供唯一的ID,这两者都标识了我的插件显示的通知以及通知的内容。这允许侦听器功能选择仅处理由我的插件显示的通知和/或仅显示我显示的通知的子集,或者根据我显示通知的原因执行不同的操作。

你在弄清楚什么不起作用时遇到麻烦的原因可能是因为你没有将问题减少到证明问题所需的最低限度。换句话说,最好只是尝试与通知onClicked监听器分开打开一个新URL,然后在监听器中尝试console.log()