Уведомление работника службы обещание нарушено?
Из 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