2012-01-03 31 views
8

ASP MVC 3 web sitesiyle çalışan HTML 5 çevrimdışı uygulama önbelleği almaya çalışıyorum. Anladığım sorun, çevrimdışı modda bir sayfaya gitmeye çalıştığımda bu , işe yaramıyor.HTML 5 önbellek bildirimi ajax istekleri ile de çalışır mı?

Bildirim dosyası için dinamik olarak oluşturulabilmesi için bir eylem kullanıyorum ve görünümde Resonse.ContentType = "text/cache-manifest" belirtiyorum.

Uygulamaya IIS'de yerel olarak ev sahipliği yaptım, bu yüzden erişmek için http://192.168.55.127/mywebsite/ kullanıyorum.

Kullandığım en açık görüş budur. Jilet görünüm motorunu kullanır ve neyin yanlış olduğunu anlamaya çalışırken biraz dağınık (kodlanmış URL vb.) 'dur. güzel gibi gözüküyor

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

:

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

Bu gibi yollar ile sonuçlanır.

Ben de tam yolunu kullanarak bildirim dosyası başvurulan adres: Ben krom site yukarı bakacak şekilde yerleştirin ve geliştirici konsolu gözlemlemek olduğu gibi görünüyor

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

, ok gibi, tüm önbelleğe görünür dosyaları herhangi bir hata atmadan. Ayrıca, http://192.168.55.127/mywebsite/manifest 'a gidersem, bildirimi görmeyi beklediğim gibi sunar.

Web sitesi normal gezinmeyi kullanmaz, bunun yerine karma parçaları kullanarak gezinir - böylece ana sayfaya gitmek için url master.htm # home olur veya seçenekler için master.html # seçenekler olur. Bu karma değişiklik javascript tarafından alınır ve ajax kullanarak ana sayfada bir div konteynerine yüklenir, daha spesifik olarak jQuery'de 'load' yöntemi kullanılır.

Bu, çevrimdışı modda olmadığında iyi çalışır ve gezinirken chrome'daki ağ sekmesini gözlemlerken istek URL'si doğrudur ve bildirim dosyasında listelenen URL ile aynıdır. Düşünebildiğim tek şey, çevrimdışı modun ajax isteği için çalışmadığı, ancak aynı şekilde çalıştığı izleniminin altında olduğudur.

Çevrimdışı modunu FireFox (sürüm 9.0) kullanarak tüm geçmişi temizleyerek, web sitesi ana sayfasına göz atarak, çevrimdışı modu etkinleştirerek ve sonra seçenekler sayfasına gitmeye çalışarak test ediyorum. Firebug'da seçenekler sayfasının doğru URL'si için bir GET isteği görüyorum ancak hiçbir zaman geri dönmüyor, hatta hata yapmıyor. Yükleme tekerleği (ateşböceğindeki net sekmedeki isteğin yanında) hala yükleniyormuş gibi dönmeyi sürdürür. Opera 11.60'da da denedim (aynı zamanda bir çevrimdışı modu var) ve aynı tür şeyler oluyor.

Yanlış yaptığım şey hakkında herhangi bir fikrim var mı? Açıklamanın yanlış anlaşıldığını mı yoksa manifestin nasıl çalışması gerektiğini yanlış anladım mı? Herhangi bir öneri takdir edilecektir.

cevap

1

AJAX içerik dosyaları (göründükleri olan) düzgün AppCache ise manifest dosyasında listelenen ise

sonra bu çalışması gerekir (ı Sorunun eski ama gelecekteki referans ... biliyorum). Şahsen, mutlak yollardan ziyade göreceli olarak kullanırdım, ama bu bir fark yaratmamalıydı.

Sorununuz, açık dosyanın bir dosya uzantısına sahip olmaması gibi görünüyor.Dosyayı (ve master.htm'deki başvurusu) appcache.manifest veya benzeri bir şekilde yeniden adlandırmayı deneyin. Sonra, manifest dosyasının MIME türünün sunucuda ayarlandığından emin olmanız gerekir. Örneğin. Sunucunun yapılandırma dosyası veya .htaccess dosyasına

AddType text/cache-manifest .manifest 

: Apache için gibi bir şey eklemek istiyorum.

Ayrıca, sınanırken önbelleğe alınmış verileri temizlemenin yanı sıra, tarayıcı, güncelleştirmeleri denetler ve dosyaları ayrı sayfa yüklemelerinde karşıdan yüklediğinden, bildirim dosyasında değişiklik yaptığınızda en az birkaç kez sayfayı yenilediğinizden emin olun.

Son olarak, AJAX ile çektiğiniz dosyalar URL'de parametreler varsa, çalışmaz, örn. ? id = 1234, ancak bildirim dosyasında böyle listelenmez. Buradaki durum böyle gözükmüyor ama farkında olmak için bir şey.