【问题标题】:Edit a chrome notification after it was called?调用后编辑 chrome 通知?
【发布时间】:2017-03-31 18:42:12
【问题描述】:

我的 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 还是有点陌生​​。对不起!

感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    这是一个有效的策略;但是如果你在你的函数中再次写入var notification,你将不再访问全局变量notification,而是创建一个新的同名的本地变量。如果您有全局变量,请避免在其他任何地方添加 var

    如果您有兴趣更深入地了解范围在 JS 中的工作原理,可能需要查看 You Don't Know JS: Scope & Closures

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

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

    但是,如果您使用相同的tag attribute 创建一个新的,则可以replace a notification

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

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

    【讨论】:

      【解决方案2】:

      您可以使用 chrome.notifications.update 更新 Chrome 通知

      【讨论】:

      • 除非这不是chrome.notifications创建的通知。
      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多