服务人员通知承诺坏了?

时间:2016-09-27 06:54:25

标签: javascript notifications service-worker

MDN我看到showNotification会将解析的承诺返回给NotificationEvent

  

语法

     

ServiceWorkerRegistration.showNotification(标题,   [options])。then(function(NotificationEvent){...});

     

返回

     

解析为NotificationEvent的承诺。

但是我已将其设置为here,正在发送通知,但是如果您查看控制台,则会注意到event未定义。

navigator.serviceWorker.register('worker.js');

Notification.requestPermission(function (result) {
    if (result === 'granted') {
        navigator.serviceWorker.ready.then(function (registration) {
            registration.showNotification('Laff', {
                body: 'Hello, you have unread mesages!',
                icon: '/apple-touch-icon.png',
                tag: 'test'
            }).then(function(event){
                console.log(event);
            });
        });
    }
});

我需要暂停通知,我认为我可以从event.notification处理,但由于event未定义,我不知道该怎么做。

我做错了吗?

2 个答案:

答案 0 :(得分:1)

我不确定你抓住通知到底意味着什么? 如果您希望在用户点击通知时捕获事件,您可以通过添加监听器来完成。

添加退货。

return registration.showNotification('Laff', {

在notice上捕获事件点击:

    self.addEventListener('notificationclick', function (event) {

        var tag = event;
}

希望有所帮助

答案 1 :(得分:0)

实际上,文档中存在问题,showNotification方法不会返回NotificationEvent对象。

如果您不想等待点击,则可以使用getNotifications方法。这是3秒后关闭通知的代码。

self.registration.showNotification(...).then(() => {
    self.registration.getNotifications({tag: ...}).then(notifications => {
      setTimeout(() => notifications[0].close(), 3000);
    });
  }
})

更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/getNotifications