我有以下设置。
服务器(localhost/index.html)
<script type="text/javascript">
if('serviceWorker' in navigator){
// Register service worker
navigator.serviceWorker.register('service-worker.js').then(function(reg){
console.log("SW registration succeeded. Scope is "+reg.scope);
}).catch(function(err){
console.error("SW registration failed with error "+err);
});
}
</script>客户端(例如localhost/client1.html)
<script>
function send_message_to_sw(msg){
return new Promise(function(resolve, reject){
// Create a Message Channel
var msg_chan = new MessageChannel();
// Handler for recieving message reply from service worker
msg_chan.port1.onmessage = function(event){
if(event.data.error){
reject(event.data.error);
}else{
resolve(event.data);
}
};
// Send message to service worker along with port for reply
navigator.serviceWorker.controller.postMessage("Client 2 says '"+msg+"'", [msg_chan.port2]);
});
}
</script>当客户关闭他的窗口时,有没有办法在服务人员中得到通知?
发布于 2016-09-27 03:11:50
为beforeunload或unload事件添加事件侦听器是在关闭选项卡/窗口之前安排代码运行的标准方法。不能保证异步代码会在窗口被销毁之前执行,但这是您最好的选择。
但是,您没有解释为什么需要让服务工作者知道客户端窗口关闭的原因。你应该花点时间想想你的用例是否真的需要它。如果需要跟踪哪个客户端与哪些请求相关联,则可以利用fetch事件处理程序中的FetchEvent.clientId属性。如果需要获取完整的客户端列表,可以通过clients.matchAll()在服务工作线程中执行此操作。
https://stackoverflow.com/questions/37642935
复制相似问题