2012-01-03 15 views
8

Próbuję uzyskać pamięć podręczną aplikacji HTML 5 offline współpracującą z witryną ASP MVC 3. Pojawia się problem polegający na tym, że podczas próby przejścia do strony w trybie offline, , to nie działa.Czy manifest HTML cache powinien działać również z żądaniami ajax?

Używam działania dla pliku manifestu, aby można było go dynamicznie generować, a w widoku określam Resonse.ContentType = "text/cache-manifest".

Hostowałem aplikację lokalnie w IIS, więc używam http://192.168.55.127/mywebsite/, aby uzyskać do niej dostęp.

To jest widok manifestu, którego używam. Używa mechanizmu podglądu maszynki do golenia i jest trochę brudny (twardy adres URL itp.) , podczas gdy ja próbuję dowiedzieć się, co jest nie tak.

@{ 
    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: 
* 

Wynika to w ścieżkach, takie jak:

http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js 
http://192.168.55.127/mywebsite/pages/home.htm 

, która wydaje się być dobre.

mam odwoływać plik manifestu przy użyciu pełnej ścieżki zbyt:

<html manifest="http://192.168.55.127/mywebsite/manifest"> 

który wydaje się być w porządku, a kiedy załadować Up strony w Chrome i obserwować konsoli programisty, wydaje buforować wszystko pliki bez wyrzucania błędów. Również jeśli przejdę na stronę http://192.168.55.127/mywebsite/manifest , wyświetli się manifest, tak jak się spodziewam.

Witryna nie używa normalnej nawigacji, zamiast tego porusza się za pomocą fragmentów haszujących - aby przejść do strony głównej, adres URL to master.htm # home lub w przypadku opcji będzie to master.html # options. Ta zmiana hash jest pobierana przez javascript i ładuje stronę do kontenera div w wzorzec za pomocą ajax, a dokładniej używa w tym celu metody "load" w jQuery.

Wszystko działa dobrze, gdy nie jest w trybie offline, a podczas przeglądania karty sieciowej w przeglądarce Chrome adres URL żądania jest poprawny i jest to ten sam adres URL, który jest wymieniony w pliku manifestu. Jedyne, co mogę myśleć to to, że tryb offline nie działa dla zapytania ajax, ale miałem wrażenie, że działa tak samo.

Testuję tryb offline za pomocą FireFox (wersja 9.0), usuwając całą historię, przeglądając stronę główną witryny, włączając tryb offline, a następnie próbując przejść do strony opcji. W firebug widzę żądanie GET dla poprawnego adresu URL strony z opcjami, ale nigdy się nie zwraca, nie ma nawet błędu. Koło ładujące (obok żądania w zakładce netto w firebugu) wciąż się obraca, jakby wciąż było ładowane. Próbowałem go również w Operze 11.60 (ponieważ ma to również tryb offline) i dzieje się tak samo.

Ktoś ma jakieś pomysły co do tego, co robię źle? Czy przeoczyłem coś oczywistego lub niezrozumiałego, w jaki sposób powinien działać manifest? Wszelkie sugestie zostaną docenione.

Odpowiedz

1

(wiem Pytanie za stary, ale na przyszłość ...)

Jeśli pliki treści AJAX są wymienione w pliku manifestu pamięć podręczną aplikacji prawidłowo (co wydaje się być), to powinno działać. Osobiście użyłbym raczej względnych niż bezwzględnych ścieżek, ale to nie powinno mieć znaczenia.

Twój problem polega na tym, że plik manifestu nie ma rozszerzenia.Spróbuj zmienić nazwę pliku (i jego odniesienie w master.htm) na appcache.manifest lub podobnie. Następnie upewnij się, że typ MIME pliku manifestu jest ustawiony na serwerze. Na przykład. dla Apache'a dodaj coś takiego:

AddType text/cache-manifest .manifest 

do pliku konfiguracyjnego serwera lub pliku .htaccess.

Oprócz czyszczenia danych z pamięci podręcznej podczas testowania, należy odświeżyć stronę przynajmniej kilka razy po wprowadzeniu zmiany w pliku manifestu, ponieważ przeglądarka sprawdza dostępność aktualizacji i pliki do pobrania w osobnych ładowaniach stron.

Wreszcie, nie zadziała, jeśli pliki, które pobierasz z AJAX mają parametry w adresie URL, np. ? id = 1234, ale nie są wymienione jako takie w pliku manifestu. Nie wydaje się, aby tak było, ale warto o tym wiedzieć.

Powiązane problemy