2016-01-08 29 views
9

TL; DR - Voglio che il mio addetto all'assistenza si attivi immediatamente dopo la prima visita al mio sito, invece che dopo il primo aggiornamento.Utilizzare Service Worker per intercettare le richieste al primo caricamento del mio sito?

Dettagli:

ho costruito una web app progressiva usando operaio di servizio, ma ho notato che il primo carico (quando è installato il SO) non intercetta le richieste di rete fino a quando l'utente aggiorna la pagina.

C'è qualcosa che posso fare per far avviare immediatamente il service worker intercettando richieste dopo che è stato installato?

risposta

13

È possibile infatti, utilizzando una combinazione di skipWaiting e clients.claim come visto di seguito.

Ciò farà sì che l'addetto all'assistenza riprenda immediatamente il controllo delle richieste di rete dalla pagina.

self.addEventListener('install', event => { 
    // Bypass the waiting lifecycle stage, 
    // just in case there's an older version of this SW registration. 
    event.waitUntil(self.skipWaiting()); 
}); 

self.addEventListener('activate', event => { 
    // Take control of all pages under this SW's scope immediately, 
    // instead of waiting for reload/navigation. 
    event.waitUntil(self.clients.claim()); 
}); 
+2

Ci sono degli svantaggi/svantaggi? (Perché questo comportamento non è l'impostazione predefinita?) – mjs

+0

AFAICT questo non funziona. Vedere https://github.com/gaye/bug-1206947 che esegue questa operazione ma non visualizza le richieste in sw sul caricamento della prima pagina. –

+0

Penso che il comportamento che sto vedendo potrebbe essere il risultato dell'uso dell'aggiornamento. Non sembra possibile utilizzare un lavoratore di servizio su un aggiornamento difficile (anche con 'self.skipWaiting()' e 'self.clients.claim()' come mostrato sopra. –