与 Angular.js 控制器通信服务人员
To communicate service-worker with Angular.js controller
我正在我的应用程序中实施推送通知。我制作了一个服务人员在我的浏览器中显示通知 (Chrome)。
现在,我需要调用一个位于 Angular 控制器中的函数。我试图在我的服务人员中举办这样的活动。
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()
有什么想法可以完成这个任务吗?非常感谢!
这是我为 angular(或 window/document 端的任何东西)与 Service Worker
之间的通信所做的
在您的 angular 应用中的某处。
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.
});
}
}
在你的 service worker 开始时
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;
});
})
);
});
我正在我的应用程序中实施推送通知。我制作了一个服务人员在我的浏览器中显示通知 (Chrome)。
现在,我需要调用一个位于 Angular 控制器中的函数。我试图在我的服务人员中举办这样的活动。
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()
有什么想法可以完成这个任务吗?非常感谢!
这是我为 angular(或 window/document 端的任何东西)与 Service Worker
之间的通信所做的在您的 angular 应用中的某处。
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.
});
}
}
在你的 service worker 开始时
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;
});
})
);
});