Мне повезло с кэшированными автономными приложениями, пока я не попытался включить данные с конечных точек JSONP. Вот небольшой пример, который загружает один фильм из нового API виджета Netflix:
<!DOCTYPE html>
<html manifest="main.manifest">
<head>
<title>Testing!</title>
</head>
<body>
<p>Attempting to recover a title from Netflix now...</p>
<script type="text/javascript">
function ping(r) { alert('API reply: ' + r.catalog_title.title.regular); }
var cb = new Date().getTime();
var s = document.createElement('SCRIPT');
s.src = 'http://movi.es/7Soq?v=2.0&output=json&expand=widget&callback=ping&cacheBuster=' + cb;
alert('SCRIPT src: ' + s.src);
s.type = 'text/javascript';
document.getElementsByTagName('BODY')[0].appendChild(s);
</script>
</body>
</html>
... и вот содержимое моего манифеста, main.manifest
, который не содержит файлов и только там, так что мой браузер знает, что нужно кэшировать вызывающий HTML-файл.
CACHE MANIFEST
Да, я подтвердил, что мой сервер отправляет манифест с правильным типом контента, text/cache-manifest
.
Приложение работает нормально - это означает, что показываются оба оповещения - при первом запуске я запускаю его, но при последующих запусках, даже с попыткой очистки кэша в строке 10, похоже, что попытка загрузить скрипт из кэша не имеет значения что такое строка запроса. Я вижу предупреждение, показывающее источник скрипта, но обратный вызов никогда не срабатывает.
Если я удаляю ссылку на манифест из строки 2 и перезагружаю свой браузер - Safari и iPhone Simulator - для очистки кэша, он работает каждый раз. Я также попытался оповестить количество тегов SCRIPT на странице, и он определенно видит как существующие, так и динамически создаваемые теги во всех случаях.