Как избежать кэширования результатов JSONP в автономном приложении HTML5?
-
19-09-2019 - |
Вопрос
Мне везло с кэшированными автономными приложениями, пока я не попробовал включить данные из конечных точек 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 на странице, и во всех случаях он определенно видит как существующий, так и динамически создаваемый тег.
Решение
Ага, нашел в спецификации, из всех сумасшедших мест:
мне нужно было добавить http://movi.es/ в СЕТЬ:раздел моего манифеста.Полный файл теперь выглядит так:
CACHE MANIFEST
NETWORK:
http://movi.es/
...и, кажется, каждый раз попадает в сеть.