2012-01-03 6 views
8

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

Я использую действие для файла манифеста, чтобы оно могло быть динамически сгенерировано, и в представлении я указываю 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"> 

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

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

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