Hallo zusammen,
vielleicht kennt sich ja jemand hier mit JavaScript ganz gut aus und kann mir bei meinem aktuellen Problem helfen.
Ich möchte die Push-Funktionalität in mein TYPO3 Projekt bringen und habe aktuell eine app.js welche einen ServiceWorker auf dem Endgerät installiert, die Berechtigungen verwaltet und meine Middleware ansprechen soll.
Nun ist es leider so, dass mein Code lokal auf meinem Rechner in einem Testprojekt außerhalb von TYPO3 super funktioniert, nachdem ich das Skript aber in die eigentliche Webanwendung bringe folgenden Fehler schmeißt:
Impossible to subscribe to push notifications Error: Kein aktiver Service Worker-Controller.
Der ServiceWorker wird aber meiner Auffassung nach korrekt geladen, denn ich bekomme eine Zeile Vorher diese Meldung:
[SW] Service worker has been registered
Das ist die Funktion um eine Subscription zu aktivieren:
`function push_subscribe() {
changePushButtonState('computing');
return checkNotificationPermission()
.then(serviceWorkerRegistration => {
console.log('wir sind hier');
return serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(applicationServerKey),
});
})
.then(subscription => {
console.log('wir sind einen schritt weiter');
// Subscription was successful
// create subscription on your server
return push_sendSubscriptionToServer(subscription, 'POST');
})
.then(() => {
console.log('wir sind im dritten then');
changePushButtonState('enabled');}) // update your UI
.catch(e => {
console.log('wir sind im catch');
if (Notification.permission === 'denied') {
// The user denied the notification permission which
// means we failed to subscribe and the user will need
// to manually change the notification permission to
// subscribe to push messages
console.warn('Notifications are denied by the user.');
changePushButtonState('incompatible');
} else {
// A problem occurred with the subscription; common reasons
// include network errors or the user skipped the permission
console.error('Impossible to subscribe to push notifications', e);
changePushButtonState('disabled');
}
});
}`
Und falls dieser Beitrag noch nicht lang genug war, hier auch die checkNotificationPermission():
`function checkNotificationPermission() {
return new Promise((resolve, reject) => {
console.log('Wir sind in der checkNotificationPermission');
// Überprüfen, ob die Benachrichtigungsrechte des Benutzers blockiert sind
if (Notification.permission === 'denied') {
return reject(new Error('Push-Nachrichten sind blockiert.'));
}
// Überprüfen, ob die Benachrichtigungsrechte des Benutzers bereits gewährt wurden
if (Notification.permission === 'granted') {
console.log('Navigator Service Worker:', navigator.serviceWorker);
// Überprüfen, ob ein aktiver Service Worker-Controller vorhanden ist
if (!navigator.serviceWorker.controller) {
return reject(new Error('Kein aktiver Service Worker-Controller.'));
}
// Versuche, auf die Bereitschaft des Service Workers zu warten
return navigator.serviceWorker.ready
.then(serviceWorkerRegistration => {
console.log('Service Worker bereit:', serviceWorkerRegistration);
resolve(serviceWorkerRegistration);
})
.catch(error => {
console.error('Fehler beim Warten auf Service Worker-Bereitschaft:', error);
reject(error);
});
}
// Wenn die Benachrichtigungsrechte des Benutzers standardmäßig sind, fordere die Berechtigung an
if (Notification.permission === 'default') {
return Notification.requestPermission().then(result => {
if (result !== 'granted') {
reject(new Error('Schlechtes Berechtigungsergebnis.'));
} else {
return navigator.serviceWorker.ready
.then(serviceWorkerRegistration => resolve(serviceWorkerRegistration))
.catch(reject);
}
});
}
// Wenn die Berechtigung unbekannt ist, reject mit einer Fehlermeldung
return reject(new Error('Unbekannte Berechtigung.'));
});
}`
Meine Letzte Meldung in der Konsole ist der "Error: Kein aktiver Service Worker-Controller."
Danke schonmal für jeden Lösungsansatz und vor allem, dass ihr bis hier hin gelesen habt :)