子域的 HTML5 localStorage 大小限制

HTML5的 localStorage 数据库通常是大小有限的ーー每个域的标准大小为5或10MB。这些限制是否可以通过子域名(例如 example.com、 hack1.example.com 和 hack2.example.com 都有自己的5MB 数据库)来规避?标准中有没有规定父域是否可以访问其子域的数据库?我找不到任何东西,而且我可以看到这样做的理由,但似乎必须有一些标准的模型。

80416 次浏览

来自 http://dev.w3.org/html5/webstorage/#disk-space

建议将每个源的大部分任意限制为5MB。实施反馈是受欢迎的,今后将用于更新这一建议。

它还提到:

用户代理应该防止在源代码下存储数据的站点 其他附属网站,例如在 A1.example.com、 a2.example.com、 a3.example.com 等,绕过了 Main example.com 存储限制。

当我问“ 5MB 是 W3C Web 存储事实上的限制吗?”的时候,我错过了这个问题,但是我得到了基本相同的答案。如果你想要更多的信息,我在我的问题中链接到一些浏览器特定的限制。

这里有一个非常详细的测试结果,涵盖了大量的桌面和移动浏览器: http://dev-test.nemikor.com/web-storage/support-test/

证实了这个错误报告: http://code.google.com/p/chromium/issues/detail?id=58985#c15

根据可以存储的字符串长度,只能依赖于2.5 MB,而不能依赖于5 MB。

一个更好的解决方案是使用[ HTML5 IndexedDB 进行离线存储。] < a href = “ http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm _ indexedDB.html”rel = “ nofollow”> 1

它看起来像旧的 Web SQL (似乎被错误地命名为 b/c,它的 离线存储)的替代品是: Indexed DB,它允许离线存储,并仍然支持:

IndexedDB 在 HTML5中是新的。 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);
});

来源 https://github.com/DVLP/localStorageDB