когда у нас есть 2 push-уведомления в истории уведомлений windows 10, тогда в браузере открывается только последнее уведомление при нажатии на него для Chrome.Но в браузере Firefox и Edge все уведомления открываются в браузере.
Вот мой код работника сервиса.Событие push:
if (!(self.Notification && self.Notification.permission === 'granted')) {
return;
}
var data = {};
if (event.data) {
data = event.data.json();
} else {
console.log('received empty data for push notification');
}
let notificationTitle = data.title;
const notificationOptions = {
body: data.bodyText,
icon: data.imageUrl,
sticky:false,
notificationCloseEvent:false,
data: {
url: data.conversationUrl,
},
};
const message = {notificationTitle, notificationOptions};
const promise = isClientFocused()
.then((clientIsFocused) => {
if (clientIsFocused) {
console.log('App is in focus no need to show notification');
return;
} else {
return firstWindowClient().then((windowClient) => {
console.log('URL is already in open');
windowClient.postMessage(message);
}, () => {
console.log('Url is not in open.');
return self.registration.showNotification(notificationTitle, notificationOptions);
});
}
});
event.waitUntil(promise);
});
Событие щелчка уведомления:
self.addEventListener('notificationclick', (event) => {
const urlToOpen = new URL(event.notification.data.url, self.location.origin).href;
const promiseChain = clients.matchAll({
type: 'window',
includeUncontrolled: true
})
.then((windowClients) => {
let matchingClient = null;
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
if (windowClient.url === urlToOpen) {
matchingClient = windowClient;
break;
}
}
if (matchingClient) {
return matchingClient.focus();
} else {
return clients.openWindow(urlToOpen);
}
});
event.waitUntil(promiseChain);
});