在这个例子中
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;一生。但你为什么需要呢?在事件发生后,为什么不能简单地解决承诺? 谢谢!
答案 0 :(得分:1)
在这种情况下,我们需要event.waitUntil
因为client.focus
和clients.openWindow
仅在作为通知点击事件的结果被调用时被允许(以保护用户在未经他们许可的情况下打开窗口)。如果没有event.waitUntil
,则会在调用clients.openWindow
或client.focus
之前冒回事件的风险,在这种情况下,浏览器会向您显示此错误:
Uncaught (in promise) DOMException: Not allowed to open a window.