2016-03-13 7 views
6

Sto lavorando a un trip planning application utilizzato per implementare il supporto offline con la combinazione di appcache e localStorage. Non appena il Service Worker è diventato un'opzione praticabile, abbiamo iniziato a usarlo. La transizione è avvenuta senza intoppi in Chrome (Chromium, Opera, ecc.), Ma Firefox (sia 44 che 45) pone alcuni problemi: Firefox registra un nuovo operatore di servizio, ma carica le pagine nel suo ambito dall'appcache obsoleto.Esiste una strategia consigliata per la migrazione da appcache a ServiceWorker in Firefox

In altre parole, se sei abbastanza fortunato da non esserti mai imbattuto nel nostro sito web, e se lo apri per la prima volta in FF 44/45, riceverai un nuovo brillante operatore che si prenderà cura di tutte le tue esigenze offline. La vita è bella.

Tuttavia, se si ha avuto la sfortuna di utilizzare Firefox prima che Service Worker fosse abilitato, avresti ancora la versione precedente del nostro sito Web nell'appcache.

  1. si va alla pagina di benvenuto - l'operaio di servizio viene attivato e (presumibilmente) si occupa di gestire tutto per l'intero ambito
  2. si accede, che reindirizza una delle pagine in ambito SW (/ ui) - è ancora dovrebbe essere gestita da operaio di servizio, ma invece di Firefox rende conto all'improvviso che ha quel vecchio AppCache e senza nemmeno cercare di caricare qualsiasi cosa dalla rete carica il vecchio contenuto dal AppCache

lo farei OK con quello (anche se la mia lettura del Mozilla docs mi dice che appcache dovrebbe essere ignorato nel campo di applicazione trolled by service worker) se ciò accadesse solo una volta. Purtroppo Firefox non tenta nemmeno di ottenere un manifest per verificare se quel vecchio appcache è aggiornato. Se avesse tentato di ottenere manifest, avrebbe ricevuto 404, il che avrebbe invalidato l'appcache (come ha fatto su Chrome). Non vedo nulla del genere sul filo (o sul lato server).

Per aggiungere la beffa alla ferita, la console di Firefox annuncia orgogliosamente: L'API Application Cache (AppCache) è obsoleta e verrà rimossa in una data futura. Si prega di considerare l'utilizzo di ServiceWorker per il supporto offline. :-)

Aggiornamento semplice (F5) carica la versione corrente della pagina tramite il tecnico dell'assistenza. Purtroppo funziona solo una volta. Dopo aver chiuso e riaperto la scheda, tutta la danza si ripete: l'addetto all'assistenza si prende cura di tutte le pagine nello scope con l'eccezione di quelle che avevano la dichiarazione manifest di appcache.

Cancellare l'appcache (appcache clear nella console dello sviluppatore o tramite l'interfaccia utente Impostazioni) risolve la situazione, ma non posso suggerirla a tutti gli utenti di Firefox.

Ho provato a trovare qualcosa di Firefox bugzilla senza molta fortuna. Se qualcuno può trovare un problema rilevante che sarebbe bello. Per ora abbiamo dovuto disabilitare il supporto SW per Firefox.

C'è un modo di segnalare a Firefox che dovrebbe ignorare la vecchia appcache quando si trova in ambito di Service Worker?

+1

In teoria, Firefox ignora AppCache se un operatore del servizio è registrato, vedere [1] e [2]. Sei sicuro che l'addetto al servizio stia controllando la pagina? [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1163545 [2]: https://www.fxsitecompat.com/en-CA/docs/2015/application-cache- api-è-stato-deprecato/ – Marco

+0

Yup. In teoria dovrebbe. Sono sicuro che il Service Worker è attivo: posso vedere registrato in 'about: serviceWorkers' (oltre al tipo di trucco F5 di lavoro e il fatto che tutto funzioni una volta eliminato Appcache). Immagino che il nocciolo della questione sia che non controlla la pagina ** nonostante ** sia attiva nello scope della pagina. Se capisco come scrivere una semplice dimostrazione, lo farò: il problema è che viene mostrato solo quando si aggiorna da 'appcache' a' service worker' nello stesso browser. – pirxpilot

risposta

-1

Perché non è possibile modificare semplicemente il file .manifest di appCache? Fornire un file vuoto, o un garbage link o una pagina fittizia, solo per ottenere il nuovo .manifest accettato, e quello vecchio dovrebbe essere cronologico.

+0

Sì. Ho provato questo. Il problema qui è che FF non ha nemmeno tentato di recuperare il manifest ma stava ancora usando l'appcache obsoleta. Ho cercato di chiarire la mia domanda quando ho scritto: _Sadly Firefox non tenta nemmeno di ottenere un manifest per controllare se quel vecchio appcache è aggiornato. Non importa quale server avrebbe risposto, se la richiesta non fosse mai stata inviato. – pirxpilot