Запрос Ajax кэшируется на iOS AppCached

У меня есть автономное приложение HTML5, выполняющее следующие действия:

  1. отображать страницу
  2. проверить манифест (согласно спецификациям)
  3. выполните запрос ajax (используя Prototype), чтобы проверить, находится ли он в сети.

У меня есть следующая проблема ТОЛЬКО на Mobile Safari iOS (не Safari, не Chrome, не Firefox):

  • ОК: запустить сценарий онлайн
  • OK: запустить сценарий в автономном режиме (режим полета)
  • ОК: Остановить сервер ОК
  • КО: перезапустить сервер

Ajax-запрос выполняется, но зависает до истечения времени ожидания, как если бы он был в автономном режиме

Обходной путь

  • ОК: если я обновлю манифест, кеш обновится
  • ОК: если я очистил кеш в настройках iOS
  • КО: Если я добавлю параметр в ajax-запрос (например, ?d={timemillis} )
  • KO: запрос ajax находится в POST
  • KO: Запрос имеет заголовки: Cache-Control: no-store и Pragma: no-cache
  • КО: Если я убью MobileSafari и перезагружу
  • KO: часть NETWORK манифеста имеет явный URL-адрес

Вот и не знаю что делать:

  • Я не могу очистить мобильное хранилище Safari, потому что оно также очищает localStorage
  • Я не могу "прикоснуться" к файлу манифеста на сервере
  • Я не могу быть уверен, что мой пользователь всегда будет в «режиме полета».

Вопрос:

  • Есть ли способ принудительно обновить кеш? (согласно спецификациям нет)
  • Есть ли способ запретить кэширование Ajax-запроса? (кроме манифеста)
  • Есть ли какой-нибудь jsFiddle, демонстрирующий, что он работает на iOS?

Наилучшие пожелания


person Jean-Philippe Encausse    schedule 13.04.2012    source источник


Ответы (1)


После многих тестов кажется, что MobileSafari на iOS действительно глючит. Моя компания решила прекратить это доказательство концепции и дождаться улучшенной версии или фреймворка, устраняющего все ошибки.

person Jean-Philippe Encausse    schedule 03.08.2012