iOS 12 CacheStorage API удаляется после перезапуска браузера

В настоящее время я разрабатываю офлайн-веб-приложение для iOS. Он использует API ServiceWorker и CacheStorage для хранения кода приложения в автономном режиме.

В iOS 11 все работало нормально. Начиная с iOS 12, CacheStorage очищается при каждой перезагрузке браузера.

Я создал небольшую демонстрацию о том, как воспроизвести это: он показывает, какие кэши есть на странице / хосте, а затем создает новый кэш с изображением в нем. Поэтому в следующий раз, когда вы посетите его, должен быть существующий кеш.

  1. Перейдите на https://itoobi.github.io/servicebreaker/
  2. На странице написано "keys: size: 0" (0 кешей сейчас)
  3. Он создает новый кеш под названием "тест" и говорит "кеш открыт".
  4. Перезагрузить страницу
  5. Теперь на странице написано "keys: test size: 1" (1 кеш существует) (и снова "кеш открыт", но здесь это не важно)
  6. Закройте браузер (закрыв его в диспетчере задач iOS)
  7. Перезапустите браузер и перезагрузите страницу
  8. Теперь он должен снова сказать "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>

1 ответ

Вы пытались установить (поставьте его на домашний экран), возможно, это исправит это.

Другие вопросы по тегам