1

我在我的應用中實施推送通知。我讓服務人員在瀏覽器中顯示通知(Chrome)。與Angular.js控制器溝通服務人員

現在,我需要調用它在Angular Controller中的函數。我試圖在我的服務人員中做出這樣的事件。

self.addEventListener('push', function(event) { 
event.waitUntil(
    fetch(self.CONTENT_URL, {headers: headers}) 
    .then(function(response) { 
    if (response.status !== 200) { 

    } 
    return response.json().then(function(data) { 

     /* some stuff*/ 

     document.dispatchEvent('myEvent'); 

     return notification; 
    }); 
    }) 
); 
}); 

在這個事件中,我處理通知,我正在嘗試使用一個事件。

在我寫了下面

document.addEventListener('myEvent', function(){ 
console.log("im here"); 
}); 

代碼中的控制器,但瀏覽器不顯示的console.log()

任何想法來完成這個任務?非常感謝!

+0

閱讀'dispatchEvent()'的文檔。你沒有事件對象。嘗試在控制檯中簡單地運行該事件代碼將看到拋出的錯誤。可能想要使用角度事件 – charlietfl

+0

是的我想使用角度事件,但服務人員不是一個角度文件 –

回答

2

這是我與服務人員


在某處,角角的應用程序之間沒有通信(或任何窗口/文件側)。

if ('serviceWorker' in navigator) { 

    // ensure service worker is ready 
    navigator.serviceWorker.ready.then(function (reg) { 

    // PING to service worker, later we will use this ping to identifies our client. 
    navigator.serviceWorker.controller.postMessage("ping"); 

    // listening for messages from service worker 
    navigator.serviceWorker.addEventListener('message', function (event) { 
     var messageFromSW = event.data; 
     console.log("message from SW: " + messageFromSW); 
     // you can also send a stringified JSON and then do a JSON.parse() here. 
    }); 
    } 
} 

爲您服務工作者

let angularClient; 
self.addEventListener('message', event => { 
    // if message is a "ping" string, 
    // we store the client sent the message into angularClient variable 
    if (event.data == "ping") { 
    angularClient = event.source; 
    } 
}); 

開始當您收到push

// In your push stuff 
self.addEventListener('push', function(event) { 
event.waitUntil(
    fetch(self.CONTENT_URL, {headers: headers}) 
    .then(function(response) { 
    if (response.status !== 200) { 

    } 
    return response.json().then(function(data) { 

     /* some stuff*/ 

     angularClient.postMessage('{"data": "you can send a stringified JSON here then parse it on the client"}'); 

     return notification; 
    }); 
    }) 
); 
}); 
+1

好一個傢伙! – MarBVI