9

我需要一种方法来查找应用程序在运行时使用 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 中有没有内置的方法(任何方法)?

谢谢你。

4

2 回答 2

19

不,不是跨浏览器。IE有它,其他的没有。但当然,可以计算域上剩余的大小。请参阅以下示例。

仅适用于 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;

Opera:5 MB 是标准的,但浏览器提供了增加限制,因为应用程序需要更多空间。

于 2012-07-23T23:07:27.023 回答
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);
    }
}
于 2014-01-11T01:52:54.163 回答