Sollte das HTML 5-Cache-Manifest auch mit Ajax-Anfragen funktionieren?

8

Ich versuche, HTML 5 Offline Application Cache mit einer ASP MVC 3-Website arbeiten zu lassen. Das Problem, das ich bekomme, ist das Wenn ich versuche, zu einer Seite im Offline-Modus zu navigieren, funktioniert es nicht.

Ich verwende eine Aktion für die Manifestdatei, damit sie dynamisch generiert werden kann, und zwar in der von mir angegebenen Ansicht resonse.ContentType="text / cache-manifest".

Ich habe die Anwendung lokal in IIS gehostet, daher verwende ich Ссылка , um darauf zuzugreifen.

Dies ist die Manifest-Ansicht, die ich verwende. Es nutzt die Rasierer View Engine und ist ein bisschen chaotisch (fest codierte URL etc.) während ich versuche herauszufinden, was los ist.

%Vor%

Dies führt zu Pfaden wie:

%Vor%

was gut zu sein scheint.

Ich habe die Manifestdatei auch mit dem vollständigen Pfad referenziert:

%Vor%

scheint in Ordnung zu sein, denn wenn ich die Seite in Chrome hochlade und die Entwicklerkonsole beobachte, erscheint es um alle Dateien zwischenzuspeichern, ohne Fehler zu verursachen. Auch wenn ich zu Ссылка navigiere es dient dem Manifest, so wie ich es erwarten würde.

Die Website verwendet keine normale Navigation, sondern navigiert mit Hash-Fragmenten. Um also nach Hause zu navigieren, wäre die URL master.htm # home oder für Optionen wäre es master.html # Optionen. Diese Hash-Änderung wird von JavaScript übernommen und lädt die Seite mit Hilfe von ajax in einen div-Container im Master, genauer gesagt verwendet sie hierzu die 'load'-Methode in jQuery.

Dies funktioniert alles, wenn Sie sich nicht im Offline-Modus befinden. Wenn Sie die Netzwerkregisterkarte beim Navigieren in Chrome beobachten, ist die Anforderungs-URL korrekt und dieselbe URL, die in der Manifestdatei aufgeführt ist. Das einzige, was mir einfällt, ist, dass der Offline-Modus nicht für eine Ajax-Anfrage funktioniert, aber ich hatte den Eindruck, dass es genauso funktioniert.

Ich teste den Offline-Modus mit FireFox (Version 9.0), indem ich den gesamten Verlauf lösche, zur Startseite der Website navigiere, den Offline-Modus aktiviere und dann versuche, zur Optionsseite zu navigieren. In Firebug sehe ich eine GET-Anfrage für die korrekte URL der Optionen-Seite, aber es kommt nie zurück, es ist nicht einmal ein Fehler. Das Ladescheibe (neben der Anfrage in der Registerkarte im Firebug) dreht sich gerade so, als wäre es noch geladen. Ich habe es auch in Opera 11.60 versucht (da es auch einen Offline-Modus hat) und das Gleiche passiert.

Hat jemand irgendwelche Ideen, was ich falsch mache? Habe ich etwas übersehen oder falsch verstanden, wie das Manifest funktionieren sollte? Irgendwelche Vorschläge werden geschätzt.

    
Tom 03.01.2012, 14:32
quelle

1 Antwort

1

(Ich weiß, dass die Frage alt ist, aber für zukünftige Referenz ...)

Wenn die AJAX-Inhaltsdateien in der AppCache-Manifestdatei ordnungsgemäß aufgelistet sind (was sie zu sein scheinen), sollte dies funktionieren. Persönlich würde ich relative statt absolute Pfade verwenden, aber das sollte keinen Unterschied machen.

Ihr Problem scheint zu sein, dass die Manifestdatei keine Dateierweiterung hat. Versuchen Sie, die Datei (und ihre Referenz in master.htm) in appcache.manifest oder ähnlich umzubenennen. Dann müssen Sie sicherstellen, dass der MIME-Typ der Manifestdatei auf dem Server festgelegt ist. Z.B. Für Apache würden Sie etwas hinzufügen wie:

%Vor%

zur Konfigurationsdatei des Servers oder Ihrer .htaccess-Datei.

Achten Sie außerdem darauf, die zwischengespeicherten Daten beim Testen zu löschen, indem Sie die Seite mindestens einige Male aktualisieren, wenn Sie Änderungen an der Manifestdatei vornehmen, da der Browser nach Aktualisierungen sucht und Dateien in separaten Seiten lädt / p>

Schließlich wird es nicht funktionieren, wenn die Dateien, die Sie mit AJAX ziehen, Parameter in der URL haben, z. ? id = 1234, aber in der Manifestdatei nicht als solche aufgeführt? Das scheint hier nicht der Fall zu sein, aber es ist etwas, dessen man sich bewusst sein muss.

    
tagawa 06.10.2012 15:33
quelle