Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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 如何获取当前应用程序使用的html5总存储大小_Javascript_Html_Local Storage - Fatal编程技术网

Javascript 如何获取当前应用程序使用的html5总存储大小

Javascript 如何获取当前应用程序使用的html5总存储大小,javascript,html,local-storage,Javascript,Html,Local Storage,我需要一种方法来查找在运行时使用HTML5sessionStorage/localStorage的应用程序所占用的总大小 我不想要基于分析器的方法 我现在正在做的是- var data = 0; for(var v in window.sessionStorage){ data += window.sessionStorage.getItem(v); } console.log(data);//.length to get char length 然后我复制粘贴这个值到一个文本文件中并检

我需要一种方法来查找在运行时使用HTML5
sessionStorage
/
localStorage
的应用程序所占用的总大小

我不想要基于分析器的方法

我现在正在做的是-

var data = 0;
for(var v in window.sessionStorage){
 data += window.sessionStorage.getItem(v); 
}

console.log(data);//.length to get char length
然后我复制粘贴这个值到一个文本文件中并检查大小

很丑,但仍然帮不了我。在HTML5API中有没有一种内置的方法(任何方法)


谢谢。

不,不是跨浏览器。(有点像,其他人没有。)。当然,域上剩余的大小是可以计算出来的。参见下面的示例

仅适用于IE:

var remSpace = window.localStorage.remainingSpace;
对于FF/Chrome/Safari:

 var limit = 1024 * 1024 * 5; // 5 MB
 var remSpace = limit - unescape(encodeURIComponent(JSON.stringify(localStorage))).length;
歌剧:
5 MB是标准配置,但由于应用程序需要更多空间,浏览器提供了增加限制的功能。

我在试图找到自己的解决方案时发现了这个问题,并希望与大家分享我的最终结果,以防对其他人有所帮助

它的缺点是,当我向localStorage添加一个值时,我将它的键放在一个数组中。然后,在将其他内容写入localStorage之前,我循环遍历这些键,并获取它们的长度总和,以确保没有超过我熟悉的阈值

如果localStorage大于2Mb(在本例中),那么它将从localStorage中删除第一项,从数组中删除该项,然后写入新项

// check the size of localStorage

var localStorageArray = [];
var localStorageSize = 0;

for ( var i=0; i < localStorageArray.length; i++ ) {
    localStorageSize += localStorage.getItem(localStorageArray[i]).length;
}

// save to localStorage if it has not been saved already

if ( !localStorage.getItem(key) ){
    if ( localStorageSize < 2000000 ) {
        localStorage.setItem(key, value);
        localStorageArray.push(key);
    } else {
        localStorage.removeItem(localStorageArray[0]);
        localStorageArray.shift();
        localStorage.setItem(key, value);
        localStorageArray.push(key);
    }
}
//检查本地存储的大小
var localStorageArray=[];
var localStorageSize=0;
对于(var i=0;i
因为这是字符串化的
数据。length
至少应该给出您的字符数。@Christoph:是的,正如我在问题中提到的。你是在建议将它乘以每个字符的某个假定字节权重吗?整洁:)我可以接受,因为我不希望它超过5mb。这里的问题是总内存假定为5mb,但你可以调整例如ff来增加它。但限制看起来是10MB。参考:谢谢你的发帖。但这不是在检查是否有200万个
value
字符吗?
键的大小如何?我是否也应该检查
1024*1024*2
(对于2MB)?