Sto cercando di ottenere la cache delle applicazioni offline HTML 5 che funziona con un sito Web ASP MVC 3. Il problema che ho riscontrato è che quando provo a navigare verso una pagina in modalità offline, non funziona.Il manifest della cache HTML 5 dovrebbe funzionare anche con richieste Ajax?
Sto utilizzando un'azione per il file manifest in modo che possa essere generata dinamicamente e nella vista si specifica il Resonse.ContentType = "text/cache-manifest".
Ho ospitato l'applicazione localmente in IIS, quindi sto utilizzando http://192.168.55.127/mywebsite/ per accedervi.
Questa è la vista manifest che sto utilizzando. Usa il motore di visualizzazione del rasoio ed è un po 'disordinato (URL hard codificato, ecc.) mentre cerco di capire cosa c'è che non va.
@{
Layout = null;
Response.ContentType = "text/cache-manifest";
}
CACHE MANIFEST
# Version: @ViewBag.Version
CACHE:
#Script Files
@foreach(var jsFile in Url.GetJsFiles())
{
@string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(jsFile))
}
#Style Sheets
@foreach(var cssFile in Url.GetCssFiles())
{
@string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(cssFile))
}
#Images
@foreach(var imageFile in Url.GetImageFiles())
{
@string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(imageFile))
}
#HTML Pages
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/master.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/home.htm"))
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/options.htm"))
NETWORK:
*
Ciò si traduce in percorsi come:
http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js
http://192.168.55.127/mywebsite/pages/home.htm
che sembra essere bene.
ho fatto riferimento il file manifesto utilizzando il percorso completo troppo:
<html manifest="http://192.168.55.127/mywebsite/manifest">
che sembra essere ok, come quando si carica il sito in cromo e osservo la console sviluppatore, sembra porre in cache tutta i file senza generare errori. Anche se navighi su http://192.168.55.127/mywebsite/manifest serve il manifest come mi aspetterei di vederlo.
Il sito web non usa la normale navigazione, ma naviga usando i frammenti di hash - così per navigare verso casa l'url sarebbe master.htm # home o per opzioni sarebbe master.html # opzioni. Questo cambio di hash viene rilevato da javascript e carica la pagina in un contenitore div nel master usando ajax, in particolare usa il metodo 'load' in jQuery per farlo.
Questo funziona correttamente quando non è in modalità offline e quando si osserva la scheda di rete in chrome durante la navigazione, l'URL della richiesta è corretto ed è lo stesso URL elencato nel file manifest. L'unica cosa che posso pensare è che la modalità offline non funziona per una richiesta Ajax, ma avevo l'impressione che funzionasse allo stesso modo.
Sto testando la modalità offline utilizzando FireFox (versione 9.0) cancellando tutta la cronologia, navigando fino alla home page del sito Web, abilitando la modalità offline, quindi cercando di passare alla pagina delle opzioni. In firebug vedo una richiesta GET per l'URL corretto della pagina delle opzioni, ma non ritorna mai, nemmeno l'errore. La rotella di caricamento (accanto alla richiesta nella scheda di rete in firebug) continua a girare come se fosse ancora in fase di caricamento. L'ho provato anche in Opera 11.60 (dato che ha anche una modalità offline) e succede lo stesso genere di cose.
Qualcuno ha qualche idea su cosa sto facendo male? Ho perso qualcosa di ovvio o incompreso su come dovrebbe funzionare il manifest? Ogni suggerimento sarà apprezzato.