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

Я пытаюсь заставить работать кеш приложения 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 (так как он также имеет автономный режим), и происходит то же самое.

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

1 ответ

(Я знаю вопрос старый, но для дальнейшего использования...)

Если файлы содержимого AJAX перечислены в файле манифеста AppCache должным образом (что они кажутся), то это должно работать. Лично я бы использовал относительные, а не абсолютные пути, но это не должно иметь значения.

Кажется, ваша проблема в том, что файл манифеста не имеет расширения. Попробуйте переименовать файл (и его ссылку в master.htm) на appcache.manifest или похожие. Затем вам нужно убедиться, что на сервере установлен MIME-тип файла манифеста. Например, для Apache вы бы добавили что-то вроде:

AddType text/cache-manifest .manifest

в файл конфигурации сервера или ваш файл.htaccess.

Кроме того, помимо очистки кэшированных данных при тестировании, убедитесь, что вы обновляете страницу как минимум пару раз, когда вносите изменения в файл манифеста, поскольку браузер проверяет наличие обновлений и загружает файлы при загрузке отдельной страницы.

Наконец, это не сработает, если файлы, которые вы извлекаете с помощью AJAX, имеют параметры в URL, например? Id=1234, но не указаны как таковые в файле манифеста. Похоже, что это не так, но об этом нужно знать.

Другие вопросы по тегам