HTML5的localStorage数据库通常受大小限制-每个域的标准大小为5或10 MB。子域可以绕过这些限制吗(例如example.com,hack1.example.com和hack2.example.com都有自己的5 MB数据库)?标准中是否有任何内容指定父域是否可以访问其子级数据库?我什么也找不到,而且可以看到以任何一种方式执行此操作的参数,但似乎必须要有一些标准模型。
HTML5的localStorage数据库通常受大小限制-每个域的标准大小为5或10 MB。子域可以绕过这些限制吗(例如example.com,hack1.example.com和hack2.example.com都有自己的5 MB数据库)?标准中是否有任何内容指定父域是否可以访问其子级数据库?我什么也找不到,而且可以看到以任何一种方式执行此操作的参数,但似乎必须要有一些标准模型。
Answers:
来自http://dev.w3.org/html5/webstorage/#disk-space
建议每个源的最大限制为5 MB。欢迎收到实施反馈,并将在以后用于更新此建议。
它还提到:
用户代理应防止站点在其他关联站点的起源下存储数据,例如,在a1.example.com,a2.example.com,a3.example.com等中存储最大限制,从而规避了example.com的主要存储限制。
这是一个相当详细的测试结果,其中涵盖了许多台式机和移动浏览器:http : //dev-test.nemikor.com/web-storage/support-test/
哪个可以确认此错误报告:http : //code.google.com/p/chromium/issues/detail?id=58985#c15
根据您可以存储的字符串长度,您只能依靠2.5MB,而不是5MB。
当我问“ 5MB是W3C Web存储的实际限制吗? ”时,我错过了这个问题,但是我得到的答案基本相同。如果您需要更多信息,我确实在我的问题中链接到一些特定于浏览器的限制。
更好的解决方案是使用[HTML5 IndexedDB进行离线存储。] 1
看来旧Web SQL(似乎被误命名为b / c代表离线存储)的替代品是:索引数据库,它允许离线存储并且仍然受支持:
IndexedDB是HTML5中的新增功能。Web数据库在用户的浏览器中托管和持久保存。通过允许开发人员创建具有丰富查询功能的应用程序,可以预见将出现一种具有在线和离线工作能力的新型Web应用程序 。
有关更多信息和测试应用,请访问:http : //ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html
要获得50MB的存储空间,请使用以下代码
// 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);
});