PMA服务工作人员通知点击不起作用

时间:2019-11-30 17:05:28

标签: javascript notifications service-worker web-push

我正在尝试显示通知,并在单击通知时执行一些操作。显示的部分工作正常,正在从服务器接收数据,但是,单击通知的功能不起作用,我已经完成了文档说的所有内容,在网络上发现的内容以及此处指向的所有内容我已实现的功能,但似乎无法正常工作。我已经进行了虚拟操作,只要不从服务器加载数据,就会触发单击,否则,数据就不会触发。

谁能告诉我我做错了什么?我会非常感谢您的帮助,我已经两天了。

self.addEventListener('push', (e) => {
  let notification = e.data.json();
  const title = 'My app ' + notification.title;
  const options = {
      body: notification.msg,
      actions: [
        { action: 'yes', title: 'Aprobar' },
        { action: 'no', title: 'Rechazar' }
      ]
  };
  self.registration.showNotification(title, options);
}); //to show the notification with server info

self.addEventListener('notificationclick', function (event) {
   console.log(event);
   var noti = event.notification.data;
   let r = event.notification.data.json();
   console.log(noti); }, 
false); //handling the click

我还尝试了使用notifyclose来查看它是否捕获了点击,但它也不起作用。

重要的是,它不显示任何错误或警告,它可以简单地执行任何操作。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!在研究了代码并阅读了一些其他文档之后,事实证明,如果我在服务器上的服务是线程类型,那么我的js中就必须等待答案。如果有人需要。

let notification = '';
self.addEventListener('push', (e) => {
 notification = e.data.json();
 const title = 'My app' + notification.title;
 const options = {
    body: notification.msg,
    actions: [
        { action: 'yes', title: 'Aprobar' },
        { action: 'no', title: 'Rechazar' }
    ]
};
 e.waitUntil(self.registration.showNotification(title, options)); }); //waitUntil to show the notification

self.addEventListener('notificationclick', function (event) {
console.log('[Service Worker] Notification click Received.');
event.notification.close();
let response = event.action;
event.waitUntil(
    fetch(`api/authorizations/processor?uuid=${notification.uuid}&response=${response}&account=${notification.user}`,
        {
            method: 'GET',
            mode: 'cors',
            cache: 'default'
        }).then((result) => {
            if (!result.ok)
                throw result;
            return result.json();
        }).then(function (data) {
            console.log(data);
        }).catch(function (error) {
            console.log(errow);
        })
); }); // waitUntil to expect a action