Оновлення (2016-11-01)
Я використовував згаданий нижче AmplifyJS, щоб вирішити цю проблему. Однак для Safari в приватному перегляді він повертався до пам’яті на основі пам’яті. У моєму випадку це було недоцільно, оскільки це означає, що зберігання очищено під час оновлення, навіть якщо користувач все ще перебуває в приватному веб-перегляді.
Також я помітив декілька користувачів, які постійно переглядають у приватному режимі на iOS Safari. З цієї причини кращим резервом для Safari є використання файлів cookie (якщо вони доступні). За замовчуванням файли cookie все ще доступні навіть у приватному веб-перегляді. Звичайно, вони видаляються під час виходу з приватного веб-перегляду, але вони не видаляються під час оновлення.
Я знайшов бібліотеку локального зберігання та резервного копіювання . З документації:
Призначення
З налаштуваннями браузера, як-от "Private Browsing", стало покладатися на робочий window.localStorage, навіть у новіших браузерах. Навіть незважаючи на те, що він може існувати, він викине винятки при спробі використання setItem або getItem. Цей модуль буде виконувати відповідні перевірки, щоб побачити, який механізм зберігання браузера може бути доступний, а потім викрити його. Він використовує той же API, що і localStorage, тому він повинен працювати як заміна, що випадає, у більшості випадків.
Обережно:
- CookieStorage має обмеження на зберігання. Будьте обережні тут.
- MemoryStorage не зберігатиметься між завантаженнями сторінки. Це більш-менш стоп-пробіл для запобігання збоїв сторінки, але може бути достатньо для веб-сайтів, які не завантажують повну сторінку.
TL; DR:
Використовуйте локальне зберігання (резервний запас) (уніфікований API з .getItem(prop)
та .setItem(prop, val)
):
Перевірте та використовуйте відповідний адаптер пам’яті для браузера (localStorage, sessionStorage, cookies, memory)
Оригінальна відповідь
Щоб додати попередні відповіді, одним із можливих рішень було б змінити спосіб зберігання. Є кілька бібліотек, таких як AmplifyJS та PersistJS, які можуть допомогти. Обидві конвеєри дозволяють зберігати на базі клієнта постійне зберігання через декілька програм.
Для AmplifyJS
місцеві магазини
- IE 8+
- Firefox 3.5+
- Сафарі 4+
- Хром
- Opera 10.5+
- iPhone 2+
- Android 2+
сховище
- IE 8+
- Firefox 2+
- Сафарі 4+
- Хром
- Opera 10.5+
- iPhone 2+
- Android 2+
globalStorage
userData
- IE 5 - 7
- userData також існує в нових версіях IE, але через примхи у впровадженні IE 9 ми не реєструємо userData, якщо підтримується localStorage.
пам'ять
- Зберігання в пам'яті надається як резервний запас, якщо жоден з інших типів пам’яті недоступний.
Для стійкихJS
- спалах: пам'ять, що зберігається у спалах 8.
- gears: постійне зберігання на основі Google Gears.
- localstorage: сховище чернетки HTML5.
- globalstorage: сховище чернетки HTML5 (стара специфікація).
- тобто: поведінка даних про Internet Explorer.
- cookie: постійне зберігання на основі файлів cookie.
Вони пропонують шар абстракції, тому вам не доведеться турбуватися про вибір типу зберігання. Майте на увазі, що можуть бути деякі обмеження (наприклад, обмеження розміру) залежно від типу пам’яті. Зараз я використовую AmplifyJS, але мені ще належить зробити ще кілька тестувань на iOS 7 / Safari / тощо. щоб побачити, чи реально вона вирішує проблему.