- Implemented a service worker (sw.js) to handle push notifications with dynamic options and notification click events. - Created a calendar layout in test.html with a grid system for displaying events across days and times. - Developed a visually engaging WLAN QR code page (wlan.html) with animated backgrounds, particle effects, and tips for connecting to the network.
60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
// sw.js
|
|
self.addEventListener("push", function (event) {
|
|
const data = event.data ? event.data.json() : {};
|
|
|
|
const title = data.title || "Shit da ist was falsch"; // title braucht man, sonst Error
|
|
|
|
// Dynamisch Options-Objekt nur mit vorhandenen Werten
|
|
const options = {};
|
|
|
|
if (data.body) options.body = data.body;
|
|
if (data.icon) options.icon = data.icon;
|
|
if (data.badge) options.badge = data.badge;
|
|
if (data.actions) options.actions = data.actions;
|
|
if (data.requireInteraction !== undefined) options.requireInteraction = data.requireInteraction;
|
|
if (data.renotify !== undefined) options.renotify = data.renotify;
|
|
if (data.tag) options.tag = data.tag;
|
|
if (data.vibrate) options.vibrate = data.vibrate;
|
|
if (data.url) options.data = { url: data.url };
|
|
|
|
event.waitUntil(
|
|
self.registration.showNotification(title, options)
|
|
);
|
|
});
|
|
|
|
|
|
self.addEventListener("notificationclick", function (event) {
|
|
event.notification.close(); // Notification schließen
|
|
|
|
// Prüfen, ob eine Action gedrückt wurde
|
|
if (event.action) {
|
|
// Dynamische Aktionen vom Server können hier behandelt werden
|
|
// Beispiel: Wir öffnen die URL, die im Notification-Data-Feld steht
|
|
if (event.notification.data && event.notification.data.url) {
|
|
event.waitUntil(
|
|
clients.openWindow(event.notification.data.url)
|
|
);
|
|
}
|
|
// Optional: Weitere Action-IDs können hier behandelt werden
|
|
console.log("Action clicked:", event.action);
|
|
} else {
|
|
// Notification selbst angeklickt (ohne Button)
|
|
if (event.notification.data && event.notification.data.url) {
|
|
event.waitUntil(
|
|
clients.openWindow(event.notification.data.url)
|
|
);
|
|
}
|
|
}
|
|
});
|
|
|
|
self.addEventListener('install', event => {
|
|
console.log("Service Worker installiert");
|
|
// Sofort aktivieren, ohne auf alte Version zu warten
|
|
self.skipWaiting();
|
|
});
|
|
|
|
self.addEventListener('activate', event => {
|
|
console.log("Service Worker aktiviert");
|
|
// Alte Clients übernehmen
|
|
event.waitUntil(self.clients.claim());
|
|
}); |