HTML5 базы данных localStorage обычно ограничены по размеру - стандартные размеры составляют 5 или 10 МБ на домен. Могут ли эти ограничения обойти субдомены (например, example.com, hack1.example.com и hack2.example.com все имеют свои собственные базы данных 5 МБ)? И есть ли что-нибудь в стандарте, которое указывает, могут ли родительские домены получать доступ к своим детским базам данных? Я ничего не могу найти, и я могу видеть аргументы для этого в любом случае, но кажется, что должна быть какая-то стандартная модель.
Ограничение размера хранилища HTML5 для субдоменов
Ответ 1
От http://dev.w3.org/html5/webstorage/#disk-space
Рекомендуется использовать в основном произвольный предел в пять мегабайт на источник. Замечания по внедрению приветствуются и будут использоваться для обновления этого предложения в будущем.
В нем также упоминается, что:
Пользовательские агенты должны защищать сайты, хранящие данные под источником другие аффилированные сайты, например. сохраняя до предела в a1.example.com, a2.example.com, a3.example.com и т.д., обходя главный пример .com ограничение хранения.
Ответ 2
Вот довольно подробный результат теста с большим количеством настольных и мобильных браузеров: http://dev-test.nemikor.com/web-storage/support-test/
Что подтверждает этот отчет об ошибке: http://code.google.com/p/chromium/issues/detail?id=58985#c15
Вы можете полагаться только на 2,5 МБ, а не на 5 МБ, на основе длины строки, которую вы можете сохранить.
Ответ 3
Я пропустил этот вопрос, когда спросил "ли 5MB лимит де-факто для W3C Web Storage?", но я получил в основном тот же ответ. Если вам нужна дополнительная информация, в моем вопросе я ссылался на некоторые ограничения, определенные браузером.
Ответ 4
Лучшим решением является использование [HTML5 IndexedDB для автономного хранилища.] 1
Похоже, что замена старого веб-SQL (который, как представляется, неверно назван b/c для автономного хранилища): Индексированный DB, который позволяет автономное хранилище и по-прежнему поддерживает:
IndexedDB является новым в HTML5. Базы данных в Интернете размещаются и сохраняются внутри пользовательского браузера. Предоставляя разработчикам возможность создавать приложения с богатыми возможностями запросов, предполагается, что новая порода веб-сайтов будут появляться приложения, которые имеют возможность работать в Интернете и офф-лайн.
Дополнительная информация и test-app: http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html
Ответ 5
Чтобы получить 50 МБ пространства для хранения, используйте код ниже
// 1. paste this line in your code
!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)}}}();
// 2. Setting values
ldb.set('nameGoesHere', 'value goes here');
// 3. Getting values - callback is required because the data is being retrieved asynchronously:
ldb.get('nameGoesHere', function (value) {
console.log('And the value is', value);
});