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

时间:2012-07-23 13:34:48

标签: javascript html5 local-storage

我需要一种方法来查找应用程序在运行时使用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

然后我将此值复制粘贴到文本文件中并检查大小。

丑陋但仍然无法帮助我。 HTML5 API中是否有一种方法(任何方法)具有内置的?

谢谢。

2 个答案:

答案 0 :(得分:12)

不,不是跨浏览器。 IE排序has it,其他人没有。但当然,可以计算剩余的在域上的大小。见下面的例子。

仅适用于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是标准配置,但随着应用程序需要更多空间,浏览器可以提高限制。

答案 1 :(得分:0)

我在尝试找到自己解决这个问题的方法时发现了这个问题,并希望分享我最终的结果,以防它可能对其他人有用。

缺点是,当我向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);
    }
}