Должен ли манифест кеша 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 (так как у него также есть автономный режим), и происходит то же самое.

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


person Tom    schedule 03.01.2012    source источник


Ответы (1)


(Я знаю, что вопрос старый, но на будущее ...)

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

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

AddType text/cache-manifest .manifest

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

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

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

person tagawa    schedule 06.10.2012