Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法在Google Chrome中增加本地存储的大小以避免超过配额\u错误:DOM异常22_Javascript_Html_Google Chrome_Local Storage - Fatal编程技术网

Javascript 有没有办法在Google Chrome中增加本地存储的大小以避免超过配额\u错误:DOM异常22

Javascript 有没有办法在Google Chrome中增加本地存储的大小以避免超过配额\u错误:DOM异常22,javascript,html,google-chrome,local-storage,Javascript,Html,Google Chrome,Local Storage,我已经编写了一个webapp,它允许您在点击save之前将图像存储在localStorage中(因此,如果信号不好,它可以脱机工作) 当localStorage达到5MB时,Google Chrome会在javascript控制台日志中产生错误: 未捕获错误:超出配额错误:DOM异常22 如何增加Google Chrome上本地存储配额的大小?配额由用户设置,即他希望为每个网站提供多少空间 因此,由于目的是限制网页,网页不能更改限制 如果存储空间不足,可以提示用户增加本地存储空间 要确定存储空间

我已经编写了一个webapp,它允许您在点击save之前将图像存储在localStorage中(因此,如果信号不好,它可以脱机工作)

当localStorage达到5MB时,Google Chrome会在javascript控制台日志中产生错误:

未捕获错误:超出配额错误:DOM异常22


如何增加Google Chrome上本地存储配额的大小?

配额由用户设置,即他希望为每个网站提供多少空间

因此,由于目的是限制网页,网页不能更改限制

如果存储空间不足,可以提示用户增加本地存储空间


要确定存储空间是否不足,可以通过保存对象然后将其删除来探测本地存储空间大小

你不能,它是5MB硬连线的。这是一个很好的例子

在Chrome中,Web SQL db和缓存清单在默认情况下也具有较低的限制,但如果您为Chrome应用商店打包应用程序


另请参见。

您不能,但如果您在本地存储中保存JSON,则可以使用库压缩数据,如:


演示:

5MB是一个硬限制,这很愚蠢。IndexedDB为您提供约50MB的容量,这更为合理。要使其更易于使用,请尝试Dexie.js

更新

实际上,对于我简单的键值目的来说,Dexie.js仍然是一个多余的工具,所以我编写了这个简单得多的脚本

有了这个,你就有了50MB的内存,可以获得和设置这样的值

// 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)}}}();

请看:事实上,请看相关:是的,那么您,用户如何在chrome中设置配额?而不是chrome?这个问题是关于Chrome的,它在标题“问题”中提到,并用google Chrome标记。至于提示用户,Chrome不会这样做,如果没有某种机制来更改javascript中的配额,甚至没有用户的手动方式,那么编写代码来提示用户似乎很难有用。@Michael,根据chrome文档,如果您请求文件系统存储,它实际上会提示用户。localStorage不是通过文件系统API访问的,而是通过window.localStorage变量访问的。如果超过它,您不会得到提示,您只会得到一个无声的失败(除非您已经测试/捕获了该条件)。该页面似乎在记录localStorage方面没有做得很好,它只是顺便提到它一次,并没有真正明确地说它是否适合它提供的任何模型。(据我所知,它们中的任何一个似乎都不完全适合……)5MB的UTF16编码。那么,250万个角色。这仍然是真的吗?!那么5MB仍然是本地存储的极限吗@迈克尔:我也是。这太愚蠢了。我正在客户端上生成GIF,并希望存储它们以避免每次都重新生成它们。IndexedDB是一种解决方案,但在我的情况下,它是一种过度的杀伤力。Dexie.js似乎有帮助,所以我将尝试使用此方法时,如何获取所有存储的密钥?@tjespe,如示例
ldb.get('namegosher',function(value){console.log('And value is',value)})中所示@Pawel我得到:无法读取未定义的属性“transaction”非常有用!我只希望它允许列出IndexedDB中存在的未知条目。(类比:
Object.keys(localStorage)
)如果您没有办法延迟加载存储元素,那么这并不愚蠢——毕竟,存储是作为
localStorage
(或
sessionStorage
)对象上的属性访问的。您假设的是延迟加载,这确实会使限制更“人为”。似乎压缩效果不佳。我尝试了一个4MB的JSON,JJLC只将其减少到原来的68%。相比之下,gzip将其降低至5%。