我需要一种方法来查找应用程序在运行时使用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中是否有一种方法(任何方法)具有内置的?
谢谢。
答案 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);
}
}