服务工作者 - 为什么要延长活动的生命周期?

时间:2016-10-05 18:46:51

标签: javascript javascript-events google-cloud-messaging service-worker

在这个例子中

self.addEventListener('notificationclick', function(event) {
console.log('On notification click: ', event.notification.tag);
event.notification.close();

// 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 == '/' && 'focus' in client)
    return client.focus();
  }
  if (clients.openWindow)
    return clients.openWindow('/');
}));
});

even.waitUntil()是函数正常工作所必需的,因为它扩展了事件&#39;一生。但你为什么需要呢?在事件发生后,为什么不能简单地解决承诺? 谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,我们需要event.waitUntil因为client.focusclients.openWindow仅在作为通知点击事件的结果被调用时被允许(以保护用户在未经他们许可的情况下打开窗口)。如果没有event.waitUntil,则会在调用clients.openWindowclient.focus之前冒回事件的风险,在这种情况下,浏览器会向您显示此错误:

Uncaught (in promise) DOMException: Not allowed to open a window.

查看this postopenWindow reference on MDN的答案。