service-worker如果客户退出,有没有办法知情?

时间:2016-06-05 14:20:21

标签: service-worker

我有以下设置。

SERVER(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>

当客户关上窗户时,有没有办法让服务工作者知情?

1 个答案:

答案 0 :(得分:0)

beforeunloadunload事件添加事件侦听器是在关闭选项卡/窗口之前调度代码的标准方法。在窗口被销毁之前不保证执行异步代码,但这是你最好的选择。

但是,您不需要解释为什么让服务工作者知道关闭客户端窗口的原因。你应该花点时间考虑一下你的用例是否真的需要它。如果需要跟踪哪个客户端与哪些请求相关联,则可以使用fetch事件处理程序中的FetchEvent.clientId属性。如果您需要获取完整的客户列表,您可以通过clients.matchAll()在服务人员中完成。