在调用Chrome通知后编辑它?

时间:2016-11-17 09:34:47

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

我的Chrome扩展程序使用通知。我打电话给他们:

function notifyMe(message) {
  if (!Notification) {
    alert('No desktop notifications possible!'); 
    return;
  }

  if (Notification.permission !== "granted")
    Notification.requestPermission();
  else {
    var notification = new Notification('Bot success!', {
      icon: 'https://material-design.storage.googleapis.com/publish/material_v_9/0Bx4BSt6jniD7blViQzF0azNqZU0/style_icons_system_intro_principles_consistent.png',
      body: message,
    });

    setTimeout(function() { notification.close() }, 5000);

    notification.onclick = function () {
      window.open("http://google.com");      
    };

  }

}

notifyMe("I am a notification!");

当通知已经存在时,是否有办法更改消息,图标和标题?有没有办法从另一个函数关闭它而不是函数本身内的5000毫秒超时?

我尝试了一些关于通过定义 var notification 从外部关闭它的事情;在我的脚本开头允许从任何地方访问,但这并没有很好地工作。

这可能非常明显,但我仍然是JS的新手。对不起!

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

您正在使用(网络)Notification API创建通知,而不是针对特定扩展程序chrome.notifications API考虑到这一点:

  

有没有办法从另一个函数关闭它而不是函数本身内的5000ms超时?

只要存储构造函数返回的notification对象,就可以随时调用notification.close()

  

我尝试了一些关于通过定义var通知从外部关闭它的事情;在我的脚本开头允许从任何地方访问,但这并没有很好地工作。

这是一个有效的策略;但如果您在函数内再次编写var notification,则不再访问全局notification变量,而是创建一个具有相同名称的新本地变量。如果您有全局变量,请避免在其他地方添加var

如果您对深入了解范围如何在JS中运作感兴趣,可能想查看You Don't Know JS: Scope & Closures

  

当通知已经存在时,是否有办法更改消息,图标和标题?

您无法编辑Notifications API创建的现有通知 - 其所有属性在创建后都是只读的,并且不能证明是更新方法。

但是,如果您使用相同的replace a notification创建新的tag attribute,则可以chrome.notifications API

new Notification('One', {
  tag: "replaceMe"
});
new Notification('Two', {
  tag: "replaceMe"
});
// Will result in only one notification, "Two", being shown

考虑将this answer用于您的目的。它提供了比Notifications API更多的功能,例如按钮(至少在Chrome中 - 如果您想要与Firefox共享代码库,那么这不是一个优势),并且不需要运行时权限请求。

答案 1 :(得分:0)

您可以使用chrome.notifications.update

更新Chrome通知