Должен ли кэш HTML 5 работать и с ajax-запросами?

Я пытаюсь заставить кэш HTML 5 автономного приложения работать с веб-сайтом ASP MVC 3. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь перейти на страницу в автономном режиме, она не работает.

Я использую действие для файла манифеста, чтобы он мог генерироваться динамически, и в представлении я указываю Resonse.ContentType = "text/cache-manifest".

Я разместил приложение локально в IIS, поэтому для доступа к нему я использую http://192.168.55.127/mywebsite/.

Это представление манифеста, которое я использую. Он использует механизм представления razor и немного беспорядочен (жестко закодированный 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

что, кажется, нормально.

Я ссылался на файл манифеста, используя полный путь:


что, кажется, нормально, так как когда я загружаю сайт в chrome и наблюдаю за консолью разработчика, он, похоже. кэширует все файлы, не выдавая никаких ошибок. Также если я перейду по адресу http://192.168.55.127/mywebsite/manifest он отображает манифест в том виде, в котором я ожидаю его увидеть.

Сайт не использует обычную навигацию, вместо этого он использует хэш-фрагменты - так, для перехода к home url будет master.htm#home или для options - master.html#options. Это изменение хэша подхватывается javascript, и он загружает страницу в контейнер div в master, используя ajax, точнее, он использует метод 'load' в jQuery для этого.

Все это работает нормально, когда не находится в автономном режиме, и при наблюдении за вкладкой сети в хроме при навигации, URL запроса корректен и является тем же URL, который указан в файле манифеста. Единственное, о чем я могу подумать, это то, что автономный режим не работает для ajax-запросов, но у меня сложилось впечатление, что это работает одинаково.

Я тестирую автономный режим с помощью FireFox (версия 9.0), очистив всю историю, перейдя на главную страницу сайта, включив автономный режим, а затем попытавшись перейти на страницу параметров. В firebug я вижу GET-запрос для правильного URL страницы опций, но он никогда не возвращается, даже не выдает ошибку. Колесо загрузки (рядом с запросом на вкладке net в firebug) просто продолжает вращаться, как будто оно все еще загружается. Я попробовал это и в Opera 11.60 (поскольку там тоже есть автономный режим), и происходит то же самое.

У кого-нибудь есть идеи, что я делаю не так? Может быть, я упустил что-то очевидное или неправильно понял, как должен работать манифест? Любые предложения будут приняты с благодарностью.

8
задан Tom 3 January 2012 в 14:32
поделиться