HTML5 localStorage полезные функции // JavaScript, TypeScript
Как: *
- Проверить, если
localStorage
поддерживается - Проверить, если
localStorage
имеет предмет - Получить количество оставшегося пространства в
localStorage
- Получить максимальное количество места в
localStorage
- Получить использованное место в
localStorage
- Получить резервную копию
localStorage
- Применить резервную копию к
localStorage
- Сбросить всю информацию
localStorage
в консоли
*проверьте ответы ниже
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:
- [ссылка] Как хранить объекты в
localStorage
- [ссылка] Как сохранить массив в
localStorage
- [ссылка] Как сохранить изображение в
localStorage
- [ссылка на сайт]
localStorage
Учебник (также охватывает события хранения и вещи, которые нужно запомнить)
Связанные с:
- [ссылка] Общая информация о веб-хранилище
- [ссылка на сайт]
sessionStorage
сохраненные данные очищаются после завершения сеанса страницы - [ссылка на сайт]
indexedDB
низкоуровневый API для хранения структурированных данных на стороне клиента
1 ответ
Мой набор функций для localStorage
в JavaScript и TypeScript
isSupported
hasItem(key)
getSpaceLeft()
getMaximumSace()
getUsedSpace()
getItemUsedSpace()
getBackup()
applyBackup(backup, fClear, fOverwriteExisting)
consoleInfo(fShowMaximumSize)
Полный код как LocalStorage
-Модуль на GitHubGist: JavaScript и TypeScript
Живой пример: на JSFiddle
Проверьте, поддерживается ли localStorage - TypeScript-Version
/**
* Flag set true if the Browser supports localStorage, without affecting it
*/
var localStorage_isSupported = (function () {
try {
var itemBackup = localStorage.getItem("");
localStorage.removeItem("");
localStorage.setItem("", itemBackup);
if (itemBackup === null)
localStorage.removeItem("");
else
localStorage.setItem("", itemBackup);
return true;
}
catch (e) {
return false;
}
})();
Проверьте, есть ли у localStorage Item - TypeScript-Version
/**
* Check if localStorage has an Item / exists with the give key
* @param key the key of the Item
*/
function localStorage_hasItem(key) {
return localStorage.getItem(key) !== null;
}
Получить количество свободного места в localStorage - TypeScript-Version
/**
* This will return the left space in localStorage without affecting it's content
* Might be slow !!!
*/
function localStorage_getRemainingSpace() {
var itemBackup = localStorage.getItem("");
var increase = true;
var data = "1";
var totalData = "";
var trytotalData = "";
while (true) {
try {
trytotalData = totalData + data;
localStorage.setItem("", trytotalData);
totalData = trytotalData;
if (increase)
data += data;
}
catch (e) {
if (data.length < 2) {
break;
}
increase = false;
data = data.substr(data.length / 2);
}
}
if (itemBackup === null)
localStorage.removeItem("");
else
localStorage.setItem("", itemBackup);
return totalData.length;
}
Получить максимальный объем пространства в localStorage - TypeScript-Version
/**
* This function returns the maximum size of localStorage without affecting it's content
* Might be slow !!!
*/
function localStorage_getMaximumSize() {
var backup = localStorage_getBackup();
localStorage.clear()
var max = localStorage_getSizeLeft();
localStorage_applyBackup(backup);
return max;
}
Получить используемое пространство в localStorage - TypeScript-Version
/**
* This will return the currently used size of localStorage
*/
function localStorage_getUsedSize() {
var sum = 0;
for (var i = 0; i < localStorage.length; ++i) {
var key = localStorage.key(i)
var value = localStorage.getItem(key);
sum += key.length + value.length;
}
return sum;
}
Получите место, использованное в моей статье TypeScript-Version
/**
* This will return the currently used size of a given Item,returns NaN if key is not found
* @param key
*/
function getItemUsedSpace(key) {
var value = localStorage.getItem(key);
if (value === null) {
return NaN;
}
else {
return key.length + value.length;
}
}
Резервный Ассоциированный Массив, только TypeScript-Версия
Получить резервную копию localStorage - TypeScript-версия
/**
* This will return a localStorage-backup (Associative-Array key->value)
*/
function localStorage_getBackup() {
var backup = {};
for (var i = 0; i < localStorage.length; ++i) {
var key = localStorage.key(i);
var value = localStorage.getItem(key);
backup[key] = value;
}
return backup;
}
Применение резервной копии к localStorage - TypeScript-Version
/**
* This will apply a localStorage-Backup (Associative-Array key->value)
* @param backup associative-array
* @param fClear optional flag to clear all existing storage first.Default:true
* @param fOverwriteExisting optional flag to replace existing keys. Default: true
*/
function localStorage_applyBackup(backup, fClear, fOverwriteExisting) {
if (fClear === void 0) { fClear = true; }
if (fOverwriteExisting === void 0) { fOverwriteExisting = true; }
if (fClear == true) {
localStorage.clear();
}
for (var key in backup) {
if (fOverwriteExisting === false && backup[key] !== undefined) {
continue;
}
var value = backup[key];
localStorage.setItem(key, value);
}
}
Сбросить всю информацию о localStorage в консоли - TypeScript-Version
/**
* This functions dumps all keys and values of the local Storage to the console,
* as well as the current size and number of items
* @param fShowMaximumSize optional, flag show maximum size of localStorage. Default: false
*/
function localStorage_consoleInfo(fShowMaximumSize) {
if (fShowMaximumSize === void 0) { fShowMaximumSize = false; }
var amount = 0;
var size = 0;
for (var i = 0; i < localStorage.length; ++i) {
var key = localStorage.key(i)
var value = localStorage.getItem(key);
console.log(amount, key, value);
size += key.length + value.length;
amount++;
}
console.log("Total entries:", amount);
console.log("Total size:", size);
if (fShowMaximumSize === true) {
var maxSize = localStorage_getMaximumSize();
console.log("Total size:", maxSize);
}
}
Заметки
- Каждый ключ и значение используют точное количество места, равное его длине строки
- Максимально допустимое пространство для хранения в моих тестах: ~5 МБ
- 5000000 Edge
- 5242880 Chrome
- 5242880 Firefox
- 5000000 IE
- Проблема с Firefox: не используйте
for (var key in localStorage)
но:for (var i = 0; i < localStorage.length; ++i) { var key = localStorage.key(i)
,for..in
петля это дало быlocalStorage
Функции члена какkey
s
// Пример - http://jsfiddle.net/1rqtd7pg/1/
console.log("LocalStorage supported:", LocalStorage.isSupported)
// true - I hope so anyways
if(LocalStorage.isSupported) {
localStorage.setItem("asd", "ASDASD")
// sets / overwrites the item "asd"
localStorage.setItem("asd" + Math.random(), "ASDASD")
// set another item each time you refresh the page
var backup = LocalStorage.getBackup()
// creates a backup, we will need it later!
console.log(JSON.stringify(backup))
// this is how the backup looks like
var usedSpace = LocalStorage.getUsedSpace()
// amount of space used right now
console.log("Used Space:", usedSpace)
var maxSpace = LocalStorage.getMaximumSpace()
// amount of maximum space aviable
console.log("Maximum Space:", maxSpace)
var remSpace = LocalStorage.getRemainingSpace()
// amount of remaining space
console.log("Remaining Space:", remSpace)
console.log("SpaceCheck", maxSpace === usedSpace + remSpace)
// true
console.log("hasItem", LocalStorage.hasItem("nothis0ne"))
// we don't have this one in our localStorage
localStorage.clear()
// oops, we deleted the localStorage!
console.log("has asd", LocalStorage.hasItem("asd"))
// item asd is lost
LocalStorage.applyBackup(backup)
// but we have a backup, restore it!
LocalStorage.consoleInfo()
// show all the info we have, see the backup worked
}