很抱歉,如果我的问题含糊不清,但这正是我基本上要做的。 我的Chrome扩展程序应用程序基本上会查看论坛,每当发布新主题时,都会显示桌面通知。它使用Chrome通知API。因此它看起来像这样:
chrome.notifications.create(“id0”,选项,回调)
选项是模板,所以我可以做类似的事情:
var options = {
type: "basic",
title: "NEW THREAD!",
message: "I made a new thread blah blah blah",
iconUrl: "url_to_small_icon"
}
因此,当用户点击通知时,它应该打开该线程的链接。
问题是我应该怎么做?
首先,我想我应该在选项模板下添加网址(类似于options.message =“www.google.com”),然后再添加 chrome.notifications.onClicked.addListener 被调用,我会从选项中获取该链接,但我认为这不会起作用,因为除了notificationID之外我无法获取有关通知本身的任何信息(在这种情况下,它将是'id0 “)。 (如果我错了,请告诉我一种方法。谢谢!)
我想到的一种方法是拥有我的chrome扩展应用程序找到的新线程的URL数组(假设已经发布了3个新主题),然后一次 chrome.notifications.onClicked调用.addListener ,我会检查通知ID(在本例中为id0),然后使用索引(在本例中为0)查找数组的值,然后打开该URL。这确实有效,但我需要在某些时候删除该元素,因为我们看到更多新线程时我的数组会增加。
问题是,如果我在点击通知后立即删除该元素,我移动数组(数组的大小为3,但现在它有2),当用户点击另一个通知时,(让我们)说通知'id1'),这将打开一个没有正确URL的元素(它应该打开数组(0),而不是数组(1),因为我删除了第一个元素。)
注意用户可以按任意顺序单击id0,id1或id2,因此如果显示通知,则无法删除通知中的元素。
我可以尝试做的一件事是在点击所有通知后删除数组,但是我不喜欢这种方法....
我确信有更好的方法所以我希望你们可以帮助我吗?
Chrome通知示例:https://developer.chrome.com/extensions/richNotifications chrome.notifications api:https://developer.chrome.com/apps/notifications
答案 0 :(得分:8)
使用论坛网址作为notificationId,您根本不必使用数组。
例如:
var forumUrl = 'https://example.com/thread/42';
var options = {
type: "basic",
title: "NEW THREAD!",
message: "I made a new thread blah blah blah",
iconUrl: "url_to_small_icon"
}
// create notification using forumUrl as id
chrome.notifications.create(forumUrl, options, function(notificationId){ });
// create a on Click listener for notifications
chrome.notifications.onClicked.addListener(function(notificationId) {
chrome.tabs.create({url: notificationId});
});
答案 1 :(得分:0)
现在,您可以将options.data = {}
中的额外有效负载作为键值对附加。
self.addEventListener('notificationclick', function(event) {
console.log(event);
});