在Chrome通知中打开网址

时间:2014-09-21 06:24:05

标签: javascript google-chrome google-chrome-extension notifications

很抱歉,如果我的问题含糊不清,但这正是我基本上要做的。 我的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

2 个答案:

答案 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);
});