2016-06-05 2 views
0

У меня есть следующие настройки.service-worker Есть ли способ получить информацию, если клиент уйдет?

SERVER (локальный/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> 

КЛИЕНТОВ (например, локальный/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> 

Есть ли способ, чтобы получить информацию в сервис-работника, когда клиент закрыл его окно?

ответ

0

Добавление прослушивателей событий для событий beforeunload или unload является стандартным способом планирования кода для запуска до закрытия вкладки/окна. Асинхронный код не гарантируется выполнить до того, как окно будет уничтожено, но это ваш лучший выбор.

Вы не объясняете , почему вам нужно сообщить сотруднику службы о закрытии окна клиента. Вы должны занять некоторое время, чтобы подумать, действительно ли это необходимо для вашего случая использования. Если вам нужно отслеживать, с каким клиентом связаны какие-либо запросы, вы можете использовать свойство FetchEvent.clientId внутри обработчика события fetch. Если вам нужно получить полный список клиентов, вы можете сделать это у сотрудника службы через clients.matchAll().

Смежные вопросы