0

в этом примереСервисный рабочий -После продления срока действия мероприятия?

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() необходим для функции, чтобы работать должным образом, потому что это увеличивает срок службы за событиями. Но зачем это нужно? Почему обещание не может быть разрешено после того, как событие вернулось? Спасибо!

+0

Возможный дубликат [Что делает event.waitUntil в обслуживающем работнике и зачем он нужен?] (Http://stackoverflow.com/questions/37902441/what-does-event-waituntil-do-in-service- рабочий-и-почему-нужен-нужен) – Marco

ответ

1

В этом случае нам нужно event.waitUntil, потому что client.focus и clients.openWindow разрешены только при вызове в результате события уведомления о клиенте (чтобы защитить пользователей от открытия окон без их разрешения). Без event.waitUntil вы рискуете в случае возвращения, прежде чем clients.openWindow или client.focus называется, в этом случае браузер даст вам эту ошибку:

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

Посмотреть ответ на this post и openWindow reference on MDN.

+0

Я уже предполагал, что это может быть потенциальной причиной. Благодарю вас за конформацию! –