Я не нашел универсального способа получить оставшийся лимит для нужных мне браузеров, но я обнаружил, что при достижении лимита появляется сообщение об ошибке. Конечно, в каждом браузере это отличается.
Чтобы добиться максимума, я использовал этот небольшой скрипт:
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");
Отсюда я получил эту информацию:
Гугл Хром
- DOMException:
- код: 22
- сообщение: «Не удалось выполнить 'setItem' в 'Storage': установка значения 'data' превысила квоту».
- имя: "QuotaExceededError"
Mozilla Firefox
- DOMException:
- код: 1014
- сообщение: «Достигнут максимальный размер постоянного хранилища»
- имя: "NS_ERROR_DOM_QUOTA_REACHED"
Сафари
- DOMException:
- код: 22
- сообщение: «QuotaExceededError: DOM Exception 22»
- имя: "QuotaExceededError"
Internet Explorer, Edge (сообщество)
- DOMException:
- код: 22
- сообщение: "QuotaExceededError"
- имя: "QuotaExceededError"
Мое решение
Пока что мое решение - добавлять дополнительный вызов каждый раз, когда пользователь что-либо сохраняет. И если будет обнаружено исключение, я скажу им, что у них заканчивается емкость хранилища.
Изменить: удалить добавленные данные
Я забыл упомянуть, что для того, чтобы это действительно работало, вам нужно удалить DATA
элемент, который был установлен изначально. Это изменение отражено выше с помощью функции removeItem () .