Есть ли способ увеличить размер localStorage в Google Chrome, чтобы избежать QUOTA_EXCEEDED_ERR: DOM Exception 22 - PullRequest
17 голосов
/ 14 апреля 2011

Я написал веб-приложение, которое позволяет вам сохранять изображения в localStorage до тех пор, пока вы не нажмете кнопку save (поэтому он работает в автономном режиме, если сигнал слабый).

Когда localStorage достигает 5 МБ, Google Chrome создаетошибка в журнале консоли JavaScript:

Uncaught Ошибка: QUOTA_EXCEEDED_ERR: исключение DOM 22 * ​​1006 *

Как увеличить размер квоты localStorage в Google Chrome?

Ответы [ 4 ]

11 голосов
/ 14 апреля 2011

Вы не можете, это жестко запрограммировано на 5 МБ. Это дизайнерское решение разработчиков Chrome .

В Chrome по умолчанию манифест БД и кэша Web SQL также имеет низкие пределы, но если вы упакуете приложение для магазина приложений Chrome , вы можете увеличить их .

См. Также Управление автономным хранилищем HTML5 - Google Chrome .

7 голосов
/ 17 мая 2016

5MB - жесткий лимит, и это глупо.IndexedDB дает вам ~ 50 МБ, что более разумно.Чтобы упростить использование, попробуйте Dexie.js https://github.com/dfahlander/Dexie.js

Обновление :

Dexie.js на самом деле было излишним для моих простых целей значения ключа, поэтому янаписал этот гораздо более простой сценарий https://github.com/DVLP/localStorageDB

с этим у вас есть 50 МБ и вы можете получить и установить значения, подобные этому

// Setting values
ldb.set('nameGoesHere', 'value goes here');

// Getting values - callback is required because the data is being retrieved asynchronously:
ldb.get('nameGoesHere', function (value) {
  console.log('And the value is', value);
});

Скопируйте / вставьте строку ниже, чтобы ldb.set() и ldb.get()из приведенного выше примера станет доступным.

!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void console.error("indexDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){console.error("indexedDB request error"),console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();
4 голосов
/ 14 апреля 2011

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

Следовательно, поскольку целью является ограничение веб-страниц, веб-страницы не могут изменить ограничение.

Если места недостаточно, вы можете предложить пользователю увеличить локальное хранилище.

Чтобы выяснить, не хватает ли места для хранения, вы можете проверить размер локального хранилища, сохранив объект и удалив его.

2 голосов
/ 23 февраля 2015

Вы не можете, но если вы сохраните JSON в вашем localStorage, вы можете использовать библиотеку для сжатия данных, например: https://github.com/k-yak/JJLC

демо: http://k -yak.github.io / JJLC /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...