webpush,如果没有标签,如何打开窗口

时间:2016-07-05 08:06:42

标签: javascript firefox service-worker web-push

我已经设置了网络推送系统并且运行良好。

我遇到的问题是,在Mac上,如果用户打开Firefox但在收到通知时没有打开任何页面,则点击丢失。 一世 什么都不做。

这里是相关部分

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

  var jsonObj = event.data.json();
  var title = jsonObj.title;

  event.waitUntil(
    self.registration.showNotification(title, {
      'body': jsonObj.body,
      'icon': jsonObj.icon,
      'href': jsonObj.href,
      'tag': jsonObj.tag

    }));

    self.addEventListener('notificationclick', function(event) {
      event.notification.close();
      var href = jsonObj.href;
      var tag  = jsonObj.tag;

      if (clients.openWindow) {
        clients.openWindow(href);
      }


      /*
      // This looks to see if the current is already open and
      // focuses if it is
      event.waitUntil(
        clients.matchAll({
          type: "window"
        })
        .then(function(clientList) {
          for (var i = 0; i < clientList.length; i++) {
            var client = clientList[i];
            if (client.url == href && 'focus' in client)
              return client.focus();
          }
          if (clients.openWindow) {
            return clients.openWindow(href);
          }
        })
      );
    */
    });

});

1 个答案:

答案 0 :(得分:4)

我建议你:

  1. 在全局范围内的notificationclick事件处理程序之外定义push事件处理程序。您可以在jsonObj的{​​{1}}参数中传递data,这样您就可以在showNotification处理程序的event对象中访问它。您可以在此处查看示例:https://github.com/mozilla/wp-web-push/blob/master/wp-web-push/lib/js/sw.php
  2. openWindow返回一个Promise,你应该使用openWindow返回的promise来调用event.waitUntil。