Я сейчас разрабатываю офлайн-веб-приложение для iOS. Он использует API ServiceWorker и CacheStorage для хранения кода приложения в автономном режиме.
В iOS 11 все работало нормально.
Начиная с iOS 12, CacheStorage очищается при каждой перезагрузке браузера.
Я создал небольшую демонстрацию о том, как воспроизвести это:
Он показывает, какие кэши есть на странице / хосте, а затем создает новый кэш с изображением в нем. Поэтому в следующий раз, когда вы посетите его, должен быть существующий кеш.
- Перейти к https://itoobi.github.io/servicebreaker/
- На странице написано "keys: size: 0" (0 кешей сейчас)
- Создает новый кеш под названием «test» и говорит «кеш открыт».
- Перезагрузить страницу
- Теперь на странице написано «ключи: тестовый размер: 1» (1 кэш существует) (и снова «кэш открыт», но это не важно)
- Закройте браузер (закрыв его в диспетчере задач iOS)
- Перезапустите браузер и перезагрузите страницу
- Теперь должно снова появиться «keys: test size: 1», поскольку там должен быть существующий кеш. -> на iOS 12, страница снова говорит "ключи: размер: 0" здесь.
Я тестировал в настольных браузерах, включая последние версии Chromium и Firefox, которые работают.
В iOS 11.4.x Safari все работает.
В iOS 12.x (12.0, 12.1, 12.1 beta 5) Safari он не работает. Протестировано на разных устройствах iPad и iPhone.
Итак, вопрос: кто-нибудь знает, что я делаю неправильно, Apple изменила API или это просто ошибка на стороне Apple?
Мне также было бы интересно, если у кого-то есть подобные проблемы, так как я не нашел ничего связанного с этим.
код тестовой страницы:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Home Page</title>
</head>
<body>
<script>
caches.keys().then(function(keys){
alert("keys: "+keys+" size: "+keys.length);
});
caches.open("test").then(function(cache){
cache.add("mario.png");
alert("cache opened");
});
</script>
</body>
</html>