2013-03-01 5 views
9

Sto giocando con una cache dell'applicazione e si verificano problemi con la funzione swapCache.Errore eccezione DOM 11 su swapCache()

ho creato più semplice la cache file manifesto del mondo:

CACHE MANIFEST 
# Timestamp: 2013-03-01 11:28:49 

CACHE: 
media/myImage.png 

NETWORK: 
* 

esecuzione l'applicazione per la prima volta che mi dà questo nella console:

Creating Application Cache with manifest http://blah_blah/offline.appcache 
Application Cache Checking event 
Application Cache Downloading event 
Application Cache Progress event (0 of 1) http://blah_blah/media/myImage.png 
Application Cache Progress event (1 of 1) 
Application Cache Cached event 

Tutto bene finora. Poi ho scambiare l'immagine e cambiare il timestamp nel file manifesto e ottengo il seguente:

Adding master entry to Application Cache with manifest http://blah_blah/offline.appcache 
Application Cache Downloading event 
Application Cache Progress event (0 of 2) http://blah_blah/media/myImage.png 
Application Cache Progress event (1 of 2) http://blah_blah/Widget/?invoke=myWidgetFunctionName 
Application Cache Progress event (2 of 2) 
Application Cache UpdateReady event 

A tal punto la funzione applicationCache.swapCache() viene chiamato dandomi un'eccezione DOM 11 errori.

I tipi MIME sono tutti correttamente configurati sul server web.

Qualcuno ha qualche idea/può indicarmi la giusta direzione? (Ho letto tutta la roba dell'appcache comunemente collegata online e non vedo cosa sto sbagliando)

Grazie!

EDIT:

Come ho già detto nei commenti qui sotto, l'impostazione della scadenza intestazioni sul mio web server per i file * .appcache a scadono sembra immediatamente per farlo lavorare anche se sto ancora ricevendo l'errore di eccezione DOM (! ?). Ho trovato il seguente post di blog che può essere d'aiuto: Possible Fix for Offline App Cache INVALIDSTATEERR

... ma non ho idea di come impostare i tipi MIME lato client. Le mie abilità google-Fu mi hanno abbandonato. Chiunque?

+0

Anche questo errore viene visualizzato occasionalmente/in modo incoerente e non riesco a trovare la soluzione. Mi piacerebbe sapere se lo capisci. – captainclam

+0

Ora ho impostato le intestazioni di scadenza sul mio server web per i file * .appcache per scadere immediatamente e ora l'appcache sembra funzionare come previsto. Tuttavia, sto ancora ricevendo l'errore di eccezione DOM 11 sulla chiamata swapCache quindi non sono sicuro del motivo per cui funziona! –

+0

Il link che hai postato suggerisce semplicemente di aggiungere i tipi MIME nella configurazione di apache (per me in '/ etc/mime.types' aggiungendo' text/cache-manifest appcache'). L'ho fatto e ho controllato il tipo di mime consegnato usando curl: 'Content-Type: text/cache-manifest'. Ma continuo a ricevere lo stesso errore ogni volta che chiamo 'appcache.update()' o 'appcache.swapCache()'. Mi piacerebbe anche sentire qualcuno capirlo ... – koko

risposta

1

Ho avuto lo stesso problema. Per un po 'ho appena disabilitato la cache se il browser non era chrome, ma poi ho deciso di riprovare, impostando il mime-type come suggerito. Firefox non genera più eccezioni quando chiamo swapCache() e l'intero processo di aggiornamento funziona come previsto. Il tipo mime deve essere impostato lato server poiché la richiesta non viene avviata dalla tua pagina web, ma dal browser, in modo da non avere alcun controllo su come legge la risposta. Hai un paio di opzioni qui. Se stai usando Apache o IIS, puoi fare come suggerito da Koko. Se si utilizza un framework che gestisce il routing per l'utente e si configura il mapping degli URL alle risposte, ad esempio i binari o un server wsgi python, in genere è possibile impostare manualmente il tipo di contenuto. Ecco il mio frammento di quello che sto usando nella mia Python applicazione utilizzando Bottle.py (WSGI based):

# BEFORE 
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False) 
def serve_cache_manifest(path): 
    return bottle.static_file(path, SITE_DIR) 

# AFTER 
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False) 
def serve_cache_manifest(path): 
    return bottle.static_file(path, SITE_DIR, mimetype='text/cache-manifest') 

Bottiglia è dotato di una funzione di utilità che gestisce il ritorno file statici che sto usando. Ha un parametro opzionale per impostare il tipo mime.

tl; dr Se non è possibile aggiungere il mime-type per la configurazione del server, è quasi sempre possibile impostare nel codice lato server (se avete qualsiasi ).