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.