如何获得免费的本地存储配额?

How to get free local storage quota?

如何获取我的应用程序本地存储中的免费配额数量?

我需要以字节、千字节、兆字节或百分比的形式获取剩余存储量。另外,如果能直观地显示我在本地存储中有多少免费配额,那就太好了。

谢谢!

编辑:请注意,这是 "answer your own guestion" 风格 post,因此我无法提出更好的建议。专注于答案,因为客人在标题中,没有更多内容。

这是我的跨浏览器(包括移动浏览器)解决方案的JSFiddle请注意,您可能需要允许 'unsafe' 脚本才能在 jsfiddle 中运行,但您自己使用它不需要许可。 您可以获得剩余的本地存储空间使用以下代码配额。如果本地存储已满,它还会提醒您。

HTML

<h2>Remaining local storage quota</h2>

<p id="quotaOutputText"></p>
<p id="quotaOutputPercentText"></p>

<div id="visualFreeQuota"><div id="visualQuotaFill"></div></div>

<br/>

<button id="getQuota">Get free quota visually</button><button id="fillQuota">Fill quota by 900 KB</button><button id="clearLocalStorage">Clear local storage</button>

CSS

#visualFreeQuota{

    height: 20px;
    width: 390px;
    border: 1px solid black;
    visibility: hidden;

}

#visualQuotaFill {

    background-color: #000000;
    height: 20px;
    width: 0px;

}

JAVASCRIPT

$(document).ready(function() {

//"Get free quota visually" button's functionality
$("#getQuota").click(function() {

    $("#visualFreeQuota").css("visibility","visible");
    $("#getQuota").prop("disabled", true); //disables the button in order to prevent browser slowing down because of button spam (cannot spam 900 KB of data in local storage with good performance)

});

//"Fill quota by 900 KB" button's functionality
$("#fillQuota").click(function() {

    $("#fillQuota").prop("disabled", true);
    var fillData = "";

    if(localStorage.getItem("filledQuota")) {

        fillData = localStorage.getItem("filledQuota");

    }

    //Fills local storage by 900 KB
    for(var i = 0; i < 1000001; i++) {

        fillData += "add9bytes"; //adds 9 bytes of data in the variable

        if(i === 100000) {

            try {

                localStorage.setItem("filledQuota", fillData); //saves data to local storage only once in this loop for increased performance

            }catch(e) {

                //Alerts the user if local storage does not have enough free space
                alert("Local storage does not have free 900 KB!"); 

            };

        }

    }

    setOutputQuota();

    setTimeout(function() {

        $("#fillQuota").prop("disabled", false);

    }, 500);

}); //"Fill quota by 900 KB" button's functionality end

//"Clear local storage" button's functionality
$("#clearLocalStorage").click(function() {

    localStorage.clear();
    setOutputQuota();

});

//Sets free local storage quota on document.ready when no buttons are yet pressed
setOutputQuota();

});

//returns the amount of remaining free bytes in local storage quota
function getRemainingQuotaInBytes() {

    return 1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length;

}

//returns the % of free local storage quota
function getRemainingQuotaInPercent() {

    return Math.round((1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length) / (1024 * 1024 * 5) * 100);

}

//sets quota texts
function setOutputQuota() {

    $("#visualQuotaFill").css("width", parseInt($("#visualFreeQuota").css("width")) / 100 * (100 - getRemainingQuotaInPercent()) + "px");
    $("#quotaOutputText").text(Math.round(getRemainingQuotaInBytes() / 1000) + " KB free in your local storage");
    $("#quotaOutputPercentText").text(getRemainingQuotaInPercent() + " % of the quota free in your local storage");

}