如何将数据从 Service Worker 传递到 Angular JS 控制器
How to pass data from service worker to Angular JS controller
我想将通过 chrome 推送通知收到的一些数据传递到 angular js
中的控制器
我的sw.js是
self.addEventListener('push', function(event) {
//console.log('Received a push message', event.data.json());
var obj = event.data.json();
var title = obj.title;
var body = "Customer number : "+obj.payload.customer_number+" \nCustomer address : "+obj.payload.customer_address;
var icon = 'assets/images/favicon-192.png';
var tag = 'sfxorder';
var sound = 'assets/audio/ping.mp3';
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag,
sound:sound ,
vibrate: [300, 100, 400]
})
);
});
我正在通过上述方法接收数据,但如何将此数据传递给控制器?
如果您需要立即从 Service Worker 向一个或多个客户端页面发送消息,那么使用 Client.postMessage()
方法将是最好的方法。
以下是 a full sample 的摘录:
// From within your service worker, you can get a list of active clients
// and call postMessage() to communicate with any of the ones you want:
self.clients.matchAll().then(function(clients) {
clients.forEach(function(client) {
client.postMessage({foo: 'bar'});
});
});
// From within your client pages, you can listen for messages via:
navigator.serviceWorker.addEventListener('message', function(event) {
// Do something with event.data
});
如果只是想保存客户端页面以后可能用到的数据,但不需要立即通知客户端页面,保存到IndexedDB是最合适的方法。
我想将通过 chrome 推送通知收到的一些数据传递到 angular js
中的控制器我的sw.js是
self.addEventListener('push', function(event) {
//console.log('Received a push message', event.data.json());
var obj = event.data.json();
var title = obj.title;
var body = "Customer number : "+obj.payload.customer_number+" \nCustomer address : "+obj.payload.customer_address;
var icon = 'assets/images/favicon-192.png';
var tag = 'sfxorder';
var sound = 'assets/audio/ping.mp3';
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag,
sound:sound ,
vibrate: [300, 100, 400]
})
);
});
我正在通过上述方法接收数据,但如何将此数据传递给控制器?
如果您需要立即从 Service Worker 向一个或多个客户端页面发送消息,那么使用 Client.postMessage()
方法将是最好的方法。
以下是 a full sample 的摘录:
// From within your service worker, you can get a list of active clients
// and call postMessage() to communicate with any of the ones you want:
self.clients.matchAll().then(function(clients) {
clients.forEach(function(client) {
client.postMessage({foo: 'bar'});
});
});
// From within your client pages, you can listen for messages via:
navigator.serviceWorker.addEventListener('message', function(event) {
// Do something with event.data
});
如果只是想保存客户端页面以后可能用到的数据,但不需要立即通知客户端页面,保存到IndexedDB是最合适的方法。