如何获得免费的本地存储配额?
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");
}
如何获取我的应用程序本地存储中的免费配额数量?
我需要以字节、千字节、兆字节或百分比的形式获取剩余存储量。另外,如果能直观地显示我在本地存储中有多少免费配额,那就太好了。
谢谢!
编辑:请注意,这是 "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");
}