IOS Safari Частный просмотр localStorage и поддержка SessionStorage?

Я нашел несколько вопросов здесь, в StackOverflow, посвященных конкретным функциям с помощью iOS Safari Private Browsing и sessionStorage и localStorage. Но я не смог найти окончательный ресурс, обозначающий поддержку, которую iOS Safari имеет для sessionStorage и localStorage при приватном просмотре.

Какая поддержка для этого или есть какой-то конкретный ресурс от Apple, обозначающий эту функциональность? Общий консенсус в том, что localStorage не поддерживается вообще без polyfill, делает то же самое для sessionStorage?

Большое вам спасибо!

Ответ 1

Я не думаю, что есть какой-то конкретный ресурс для iOS, но здесь официальная документация Apple:

https://developer.apple.com/library/safari/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Name-ValueStorage/Name-ValueStorage.html

И этот вопрос StackOverflow также очень полезен:

QuotaExceededError: исключение Dom 22: Была сделана попытка добавить что-то к хранилищу, которое превысило квоту

В общем, при решении для sessionStorage и localStorage попробуйте на самом деле разрабатывать локально с Safari на вашем телефоне при открытии Web Inspector. Удачи:)

Ответ 2

Да, это же относится к sessionStorage и localStorage.

Есть отличный Gist Paul Irish, объясняющий историю проблемы:

https://gist.github.com/paulirish/5558557

Лучшее решение, если вам нужен только один из них:

function isLocalStorageEnabled() {
  try {
      var mod = '__storage_test__';
      localStorage.setItem(mod, mod);
      localStorage.removeItem(mod);
      return true;
  } catch(e) {
      return false;
  }
}

Или, чтобы это работало для обоих, рекомендованное MDN решение является более общим: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

function storageAvailable(type) {
    try {
        var storage = window[type];
        var x = '__storage_test__';
        storage.setItem(x, x);
        storage.removeItem(x);
        return true;
    }
    catch(e) {
        return false;
    }
}