#javascript #ios #reactjs #progressive-web-apps #mobile-safari
Вопрос:
Эта проблема возникает только с моим веб-приложением progressive React, когда я запускаю его на своем iPhone 5S (iOS 12.5.2) и телефоне LG Android. Это делается с помощью мобильного Chrome и мобильного Safari. Все отлично работает в Chrome на моем Macbook Pro.
Я открою приложение, а затем переключусь на что-то другое на своем телефоне. Если я вернусь к нему в течение пяти или шести минут, прежнее состояние не будет потеряно. Но если я подожду дольше, страница перезагрузится, как если бы localStorage был удален. Чем дольше я отсутствовал, тем больше времени требуется для восстановления приложения. Некоторое время он делал это, постепенно расширяя часть задержки реактивации, но только недавно он также начал полностью терять то, что находится в локальном хранилище.
Я просмотрел «Данные веб-сайта» до и после того, как это произошло, и увидел, что на сайте примерно столько же данных до и после.
Я пробовал это как с помощью сервисного работника, так и без него, но получил те же результаты.
На сайте находится: https://www.stopindoctrination.org
Комментарии:
1. Если это также происходит с вашим телефоном LG Android, то, вероятно, это не связано с ios или мобильным safari. Возможно, вы захотите изменить теги на
react
илиjavascript
илиpwa
.2. Если вы вручную убьете приложение и немедленно вернетесь, будут ли также уничтожены данные?
3. Хороший вопрос, @CyberEd. Если я убью приложение и немедленно вернусь, данные будут потеряны. Я не пробовал это на своем рабочем столе. Я сделал это только что, и он отлично работает на рабочем столе. Проблема возникает только на моем мобильном устройстве.
4. Похоже, что это может быть ошибка ios в версиях после 12.4.2. Согласно этой теме, их тестовый случай похож на ваш: developer.apple.com/forums/thread/125627 . Apple заявила, что удалит хранилище браузера через 7 дней, так что это может быть ошибкой в их предотвращении отслеживания.
Ответ №1:
по-видимому, webkit удаляет хранилище старше 7 дней
Вы извлекаете и вручную помещаете данные в локальное хранилище или используете работника службы для прерывания запросов на извлечение и кэширования данных?
Если вы еще не используете сервисного работника, я бы предложил это сделать.
Комментарии:
1. В вопросе говорится, что они пробовали это как с работником службы, так и без него.
2. Спасибо. Я не думаю, что это все. Проблема возникнет после бездействия в течение получаса или около того, а не семи дней. На самом деле я не делаю никаких выводов. Все данные поставляются в комплекте с кодом приложения.
Ответ №2:
Связано с удалением локального хранилища в приложениях ios при нехватке памяти устройства: https://github.com/scottjehl/Device-Bugs/issues/64
В потоке говорится, что IOS может очистить данные локального хранилища, если память устройства почти заполнена, так что это следует проверить, так как это может быть легко подтверждено как известная ошибка или нет.
В противном случае это может быть постоянная ошибка, связанная с предотвращением отслеживания яблок, которая будет устранена только через 7 дней.
Переход на более надежный вариант хранения в браузере, такой как pouchdb, который использует IndexedDB и WebSQL под капотом, а не localStorage, может стать решением, если другие проблемы не приведут к исправлению.
Комментарии:
1. Спасибо. Я не думаю, что это так, потому что проблема возникает и на моем устройстве Android, и я могу воспроизвести проблему, просто закрыв приложение Safari и снова открыв его. Это очень сложный вопрос.