49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
console.log("Running service worker!!!");
|
|
self.addEventListener("install", () => {
|
|
console.log("service worker installed");
|
|
});
|
|
|
|
self.addEventListener("activate", () => {
|
|
console.log("service worker activated");
|
|
});
|
|
|
|
self.addEventListener("push", function (event) {
|
|
const data = JSON.parse(event.data.text());
|
|
event.waitUntil(
|
|
registration.showNotification(data.title, {
|
|
body: data.message,
|
|
icon: "/icon-192x192.png",
|
|
data: {
|
|
url: data.url ?? "/",
|
|
},
|
|
}),
|
|
);
|
|
});
|
|
|
|
self.addEventListener("notificationclick", function (event) {
|
|
event.notification.close();
|
|
event.waitUntil(
|
|
clients
|
|
.matchAll({ type: "window", includeUncontrolled: true })
|
|
.then(function (clientList) {
|
|
if (clientList.length > 0) {
|
|
let client = clientList[0];
|
|
for (let i = 0; i < clientList.length; i++) {
|
|
if (clientList[i].focused) {
|
|
client = clientList[i];
|
|
}
|
|
}
|
|
if (event.notification.data?.url) {
|
|
return client.navigate(event.notification.data.url);
|
|
}
|
|
return client.focus();
|
|
}
|
|
if (event.notification.data?.url) {
|
|
const outcome = clients.openWindow(event.notification.data.url);
|
|
return outcome.navigate(event.notification.data.url);
|
|
}
|
|
return clients.openWindow("/");
|
|
}),
|
|
);
|
|
});
|