The waitUntil () work event service received a promise that was rejected using "TypeError: b is null"

This is my working working file, which shows a push notification:

importScripts('https://www.gstatic.com/firebasejs/3.5.0/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/3.5.0/firebase-messaging.js'); var config = { apiKey: "my_key", authDomain: "my_domain.firebaseapp.com", databaseURL: "https://my_db.firebaseio.com", storageBucket: "my_bucket.appspot.com", messagingSenderId: "my_sender_id" }; firebase.initializeApp(config); var messaging = firebase.messaging(); messaging.setBackgroundMessageHandler(function (payload) { var notificationTitle = 'Hello World'; var notificationOptions = { body: 'Test push notification' }; return self.registration.showNotification(notificationTitle,notificationOptions); }); 

This is my html where it registers a service worker:

 <!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div>TODO write content</div> <script src="https://www.gstatic.com/firebasejs/3.5.0/firebase.js"></script> <script> var config = { apiKey: "my_key", authDomain: "my_domain.firebaseapp.com", databaseURL: "https://my_db.firebaseio.com", storageBucket: "my_bucket.appspot.com", messagingSenderId: "my_sender_id" }; firebase.initializeApp(config); </script> <script> var messaging = firebase.messaging(); var ser = '/serviceworker.js'; if ('serviceWorker' in navigator) { // Register service worker navigator.serviceWorker.register('./public/serviceworker.js').then(function (reg) { messaging.useServiceWorker(reg); messaging.requestPermission() .then(function () { console.log('Notification permission granted.'); return messaging.getToken() .then(function (currentToken) { if (currentToken) { console.log('in if', currentToken); if (window.XMLHttpRequest) { xhttp = new XMLHttpRequest(); } else { xhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { } }; xhttp.open("POST", "/notification", true); xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhttp.send(JSON.stringify({token: currentToken})); } else { console.log('in else', currentToken); } }).catch(function (err) { console.log('An error occurred while retrieving token. ', err); }); }) .catch(function (err) { console.log('Unable to get permission to notify. ', err); }); messaging.onMessage(function (payload) { var options = { body: payload.data.body } var notificationObj = new Notification(payload.data.title, options); }); }).catch(function (err) { console.error("SW registration failed with error " + err); }); } </script> </body> </html> 

Everything works fine, but when I load the page for the first time, I see the following error after permission to notify. I use FCM for push notification.

 Service worker event waitUntil() was passed a promise that rejected with 'TypeError: b is null'. 
+5
source share

Source: https://habr.com/ru/post/1258821/


All Articles