Я пытаюсь заставить кеш офлайн-приложений HTML 5 работать с веб-сайтом ASP MVC 3. Проблема, которую я получаю, заключается в том, что когда я пытаюсь перейти на страницу в автономном режиме, это не работает.
Я использую действие для файла манифеста, чтобы его можно было динамически сгенерировать, и в представлении я указываю Resonse.ContentType = "text / cache-manifest".
Я разместил приложение локально в IIS, поэтому я использую http://192.168.55.127/mywebsite/ для получить доступ к нему.
Это вид манифеста, который я использую. Он использует механизм просмотра бритвы и немного запутан (жестко закодированный URL-адрес и т. Д.), Пока я пытаюсь понять, что не так.
@{
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:
*
Это приводит к таким путям, как:
http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js
http://192.168.55.127/mywebsite/pages/home.htm
что вроде нормально.
Я также сослался на файл манифеста, используя полный путь:
<html manifest="http://192.168.55.127/mywebsite/manifest">
Кажется, что это нормально, поскольку, когда я загружаю сайт в Chrome и наблюдаю за консолью разработчика, кажется, что он кэширует все файлы без каких-либо ошибок. Кроме того, если я перейду к http://192.168.55.127/mywebsite/manifest, он обслуживает манифест, поскольку я Я ожидал увидеть это.
Веб-сайт не использует обычную навигацию, вместо этого он перемещается с использованием хеш-фрагментов - поэтому для перехода на главную URL-адрес будет master.htm # home или для параметров это будет master.html # options. Это изменение хэша подбирается javascript, и он загружает страницу в контейнер div в мастере с помощью ajax, в частности, для этого он использует метод load в jQuery.
Все это отлично работает, когда не в автономном режиме, и при просмотре вкладки сети в Chrome во время навигации URL-адрес запроса является правильным и является тем же URL-адресом, который указан в файле манифеста. Единственное, о чем я могу думать, это то, что автономный режим не работает для запроса ajax, но у меня создалось впечатление, что он работает так же.
Я тестирую автономный режим с помощью FireFox (версия 9.0), очищая всю историю, просматривая домашнюю страницу веб-сайта, включая автономный режим, а затем пытаясь перейти на страницу параметров. В firebug я вижу запрос GET для правильного URL-адреса страницы параметров, но он никогда не возвращается, это даже не ошибка. Колесо загрузки (рядом с запросом на вкладке net в firebug) просто продолжает вращаться, как будто оно все еще загружается. Я пробовал это и в Opera 11.60 (так как у него также есть автономный режим), и происходит то же самое.
У кого-нибудь есть идеи относительно того, что я делаю неправильно? Я пропустил что-то очевидное или неправильно понял, как должен работать манифест? Любые предложения будут оценены.