代码之家  ›  专栏  ›  技术社区  ›  Robin Maben

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

  •  10
  • Robin Maben  · 技术社区  · 12 年前

    我需要一种方法来查找使用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 回复  |  直到 12 年前
        1
  •  19
  •   Jonathan    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是标准配置,但由于应用程序需要更多空间,浏览器会增加限制。

        2
  •  0
  •   brianrhea    11 年前

    我在试图找到自己的解决方案时发现了这个问题,并想分享我的结局,以防对其他人有所帮助。

    简而言之,当我向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);
        }
    }