получить объект службы после активации работника службы - PullRequest
0 голосов
/ 14 октября 2019

Я регистрирую работника сервиса, используя следующий код. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я действительно получаю объект Service Registration, но этот объект активируется через несколько секунд.

Итак, есть ли способ получить объект Service Registration только тогда, когдаоно активируется, потому что если объект службы не активирован, я не могу отправить сообщение, используя swReg.active.postMessage(..) на Service Worker немедленно

var verifyPermission = new Promise(function(resolve, reject) {

    if ('serviceWorker' in navigator) {

        window.addEventListener('load', () => {
            console.log('Notify.js -> Service Worker and Push is supported');

            var dataUrl = document.getElementById('directUrl').value;

            Notification.requestPermission(status => {

            isNotificationAllow = status;
            console.log('Notify.js -> Notification permission status:', status);

                if(status === 'denied'){

                    reject(null);

                }
                navigator.serviceWorker.getRegistrations().then(registrations => {                           

                    if(registrations.length == 0){

                        navigator.serviceWorker.register(dataUrl)

                            .then(swReg => {
                                console.log('Notify.js -> Service Worker is registered', swReg);


                                if(swReg.active){
                                    resolve(swReg);

                                    // this gets failed swReg.active.postMessage(..)
                                }
                                else{

                                    console.log("Not yet registered 1");
                                }





                            })
                            .catch(err => {
                                console.error('Notify.js -> Service Worker Error', err);

                            });
                    }else{


                        console.log("Notify.js -> Already registered service worker ",registrations[0]);     
                        if(registrations[0].active)
                            resolve(registrations[0]);
                        else{

                            console.log("Not yet registered 2");
                        }




                    }                  


                });


            });
        });

    }else{

        reject(null);
        //alert('Notify.js -> Service Worker and Push is NOT supported');


    }

});
...