No encontré una forma universal de obtener el límite restante en los navegadores que necesitaba, pero descubrí que cuando alcanzas el límite, aparece un mensaje de error. Por supuesto, esto es diferente en cada navegador.
Para maximizarlo, usé este pequeño script:
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");
De eso obtuve esta información:
Google Chrome
- DOMException:
- código: 22
- mensaje: "No se pudo ejecutar 'setItem' en 'Almacenamiento': la configuración del valor de 'datos' excedió la cuota".
- nombre: "QuotaExceededError"
Mozilla Firefox
- DOMException:
- código: 1014
- mensaje: "Se alcanzó el tamaño máximo de almacenamiento persistente"
- nombre: "NS_ERROR_DOM_QUOTA_REACHED"
Safari
- DOMException:
- código: 22
- mensaje: "QuotaExceededError: DOM Exception 22"
- nombre: "QuotaExceededError"
Internet Explorer, Edge (comunidad)
- DOMException:
- código: 22
- mensaje: "QuotaExceededError"
- nombre: "QuotaExceededError"
Mi solución
Hasta ahora, mi solución es agregar una llamada adicional cada vez que el usuario guarda algo. Y si se detecta la excepción, les diría que se están quedando sin capacidad de almacenamiento.
Editar: eliminar los datos agregados
Olvidé mencionar que para que esto realmente funcione, necesitaría eliminar el DATA
elemento que se configuró originalmente. El cambio se refleja arriba usando la función removeItem () .