Уведомление работника службы обещание нарушено?
Из MDN я вижу, что showNotification возвращает обещание, которое должно разрешиться в NotificationEvent.
Синтаксис
ServiceWorkerRegistration.showNotification (название, [варианты]).затем (функция (NotificationEvent) { ... });
Возвращает
Обещание, которое разрешается в NotificationEvent.
Однако я установил его здесь , уведомление отправляется и все, но если вы посмотрите на консоль, вы заметите, что event не определено.
navigator.serviceWorker.register('worker.js');
Notification.requestPermission(function (result) {
if (result === 'granted') {
navigator.serviceWorker.ready.then(function (registration) {
registration.showNotification('Laff', {
body: 'Hello, you have unread mesages!',
icon: '/apple-touch-icon.png',
tag: 'test'
}).then(function(event){
console.log(event);
});
});
}
});
Мне нужно получить уведомление, которое я думал, что смогу сделать из event.notification, но поскольку event не определено, я действительно не знаю, что делать.
Я делаю что-то не так?
2 ответа:
Я не уверен, что именно вы подразумеваете под получением уведомления ? если вы хотите захватить событие, когда пользователь нажмет на уведомление, Вы можете сделать это, добавив прослушиватель.
Добавить возврат .
return registration.showNotification('Laff', {Поймать событие на notificationClick:
self.addEventListener('notificationclick', function (event) { var tag = event; }Надеюсь, это поможет
Действительно есть проблема в документах, метод
showNotificationне возвращает объектNotificationEvent.Если вы не хотите ждать щелчка, вы можете использовать метод
getNotifications. Вот код для закрытия уведомления через 3 секунды.self.registration.showNotification(...).then(() => { self.registration.getNotifications({tag: ...}).then(notifications => { setTimeout(() => notifications[0].close(), 3000); }); } })Дополнительная информация здесь: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/getNotifications