Вычисление использования пространства localStorage

Я создаю приложение с помощью редактора Bespin и localStorage HTML5. Это хранит все файлы локально и помогает с грамматикой, JSLint использования и некоторыми другими синтаксическими анализаторами для CSS и HTML помочь пользователю.

Я хочу вычислить, сколько из предела localStorage использовалось и сколько на самом деле существует. Действительно ли это возможно сегодня? Я думал для не просто вычислить биты, которые хранятся. Но с другой стороны я не уверен, что больше там, что я не могу измерить меня.

76
задан JeroenEijkhof 12 June 2010 в 01:32
поделиться

2 ответа

Я не нашел универсального способа получить оставшийся лимит для нужных мне браузеров, но я нашел при достижении предела появляется сообщение об ошибке. Конечно, в каждом браузере все по-разному.

Чтобы добиться максимального результата, я использовал этот небольшой скрипт:

for (var i = 0, data = "m"; i < 40; i++) {
    try { 
        localStorage.setItem("DATA", data);
        data = data + data;
    } catch(e) {
        var storageSize = Math.round(JSON.stringify(localStorage).length / 1024);
        console.log("LIMIT REACHED: (" + i + ") " + storageSize + "K");
        console.log(e);
        break;
    }
}
localStorage.removeItem("DATA");

Отсюда я получил следующую информацию:

Google Chrome

  • DOMException:
    • код: 22
    • сообщение: «Не удалось выполнить 'setItem' в 'Storage': установка значения 'data' превысила квоту."
    • имя:" QuotaExceededError "

Mozilla Firefox

  • DOMException:
    • код: 1014
    • сообщение: «Достигнут максимальный размер постоянного хранилища»
    • имя: «NS_ERROR_DOM_QUOTA_REACHED»

Safari

  • DOMException:
    • код: 22
    • сообщение: «QuotaExceededError: DOM Exception 22»
    • имя: «QuotaExceededError»

Internet Explorer, Edge (сообщество)

  • DOMException:
    • код: 22
    • сообщение: "QuotaExceededError"
    • имя: "QuotaExceededError"

Мое решение

Пока что мое решение - добавлять дополнительный вызов каждый раз, когда пользователь что-либо сохраняет. И если исключение обнаружено, я бы сказал им, что у них заканчивается емкость хранилища.


Изменить: удалить добавленные данные

Я забыл упомянуть, что для того, чтобы это действительно работало, вам нужно удалить элемент DATA , который был установлен изначально. Это изменение отражено выше с помощью функции removeItem () .

49
ответ дан 24 November 2019 в 11:13
поделиться

IE8 для этой цели реализует свойство Остающееся пространство :

alert(window.localStorage.remainingSpace);  // should return 5000000 when empty

К сожалению, похоже, что это недоступно в других браузерах. Однако я не уверен, реализуют ли они что-то подобное.

26
ответ дан 24 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: