Как изменить локальное хранилище

Because it is in the preferences of the Cloud  LR, not the Classic. Which is my problem too! I want to change to another disk for my Photos and use Lightroonm Classic and can't find out how.

quote

This is a bogus answer!
This answer solved absolutely nothing.

— And there is no attempt to at least give an explanation to why the problem has no solution!

By @johnj48353602

Bogus? Really? Some of the definitions of «bogus» are «fake, fraudulent, deceptive, spurious, false, sham», and I’m struggling to see how any of those apply to the answer that I gave. Read the original post again…the question asked was «how can I change the drive that is used for local storage?», and my answer basically was «you can’t, apart from the local copy of the original images». Nothing «fake, fraudulent, deceptive, etc, etc.» about that, all completely accurate.

Granted, that’s not the answer you wanted to hear, but I don’t see how that justifies your attack on my integrity. I’m just a user the same as you, trying to answer other’s user’s questions to the best of my ability….I don’t work for Adobe, so if you thought you were talking to an Adobe representative then you are sadly mistaken (though even I were an Adobe employee that still doesn’t justify attacks like that).

Ultimately, if you just want to vent at Adobe, you’re doing it in the wrong forum….this is just a User-to-User forum which Adobe provides for the Adobe community to help each other. The better place to get your message to Adobe is via their offical feedback site (https://feedback.photoshop.com/topics/lightroom-desktop-cloudbased/5f5f2093785c1f1e6cc40874), where you will find there’s already an existing thread asking for more user flexibility regarding the local storage requirements. Look it up and add your vote, and any supportive comments you would like to make (though might I suggest using a more constructive tone?).

You might also take the opportunity to ask Adobe for the explanatiion that you’re looking for about why the current system has been so designed. I think I know, but because I’m not certain I’ll refrain from speculative posts.

quote

This is a bogus answer!
This answer solved absolutely nothing.

— And there is no attempt to at least give an explanation to why the problem has no solution!

By @johnj48353602

Bogus? Really? Some of the definitions of «bogus» are «fake, fraudulent, deceptive, spurious, false, sham», and I’m struggling to see how any of those apply to the answer that I gave. Read the original post again…the question asked was «how can I change the drive that is used for local storage?», and my answer basically was «you can’t, apart from the local copy of the original images». Nothing «fake, fraudulent, deceptive, etc, etc.» about that, all completely accurate.

Granted, that’s not the answer you wanted to hear, but I don’t see how that justifies your attack on my integrity. I’m just a user the same as you, trying to answer other’s user’s questions to the best of my ability….I don’t work for Adobe, so if you thought you were talking to an Adobe representative then you are sadly mistaken (though even I were an Adobe employee that still doesn’t justify attacks like that).

Ultimately, if you just want to vent at Adobe, you’re doing it in the wrong forum….this is just a User-to-User forum which Adobe provides for the Adobe community to help each other. The better place to get your message to Adobe is via their offical feedback site (https://feedback.photoshop.com/topics/lightroom-desktop-cloudbased/5f5f2093785c1f1e6cc40874), where you will find there’s already an existing thread asking for more user flexibility regarding the local storage requirements. Look it up and add your vote, and any supportive comments you would like to make (though might I suggest using a more constructive tone?).

You might also take the opportunity to ask Adobe for the explanatiion that you’re looking for about why the current system has been so designed. I think I know, but because I’m not certain I’ll refrain from speculative posts.

В JavaScript есть объект localStorage, который позволяет считывать и записывать данные в локальное хранилище. В localStorage можно длительное время хранить до 10 мегабайт информации, в которой может содержаться сколько угодно переменных. Этим локальное хранилище выгодно отличается от cookies, в которых можно хранить только 30 переменных на домен со значением короче 4096 символов.

Создание и изменение в локальном хранилище

Чтобы создать (записать) или изменить значение в локальном хранилище, используется метод setItem:

localStorage.setItem('Ключ', 'Значение');

Тогда изменится запись с названием «Ключ». Её значение будет установлено на «Значение». Если запись в локальном хранилище с таким названием уже была, то она перезапишется. Вместо «Ключ» и «Значение» в примере можно подставить любой текст или цифры, чтобы сохранить их в хранилище.

Вы можете просматривать и редактировать в локальное хранилище прямо в браузере, с помощью средств разработчика. Читайте подробнее об этом в статье «Редактор localStorage в вашем браузере».

Есть ещё один способ записать/изменить значение в локальном хранилище:

localStorage['Ключ'] = 'Значение';

В локальном хранилище можно хранить только строки, как и в cookies. Но его размера вполне достаточно, чтобы поместить туда сериализованные данные в формате JSON.

Рекомендуем ознакомиться со статьёй «Работа с JSON в JavaScript (stringify, parse)», чтобы больше узнать о формате JSON.

Продемонстрируем способ записи объекта в локальное хранилище путём перевода его в JSON строку:

var a = {
   'BOOL': true,
   'INT': 20,
   'ARRAY': [1, 2, 3],
   'STRING': 'Тише, мыши, кот на крыше'
};
localStorage.setItem('Данные', JSON.stringify(a) );

Чтение из локального хранилища

Попробуем прочитать значение по ключу из локального хранилища. Для этого используем тот же самый объект localStorage и метод getItem:

var a = localStorage.getItem('Ключ');

При выполнеии такого кода в переменную «a» будет записано значение из локального хранилища, которое хранилось там под ключом «Ключ». Есть другой способ обращения к значению:

var a = localStorage['Ключ'];

В случае сохранения данных в формате JSON, о котором писали в предыдущем параграфе, необходимо перевести данные из JSON строки в объект JavaScript:

var a = localStorage.getItem('Данные');
var b = JSON.parse(a);

— таким образом можно хранить довольно большие объекты в одном ключе, в локальном хранилище.

Удаление из локального хранилища

Чтобы удалить значение из локального хранилище, необходимо воспользоваться методом removeItem. Продемонстрируем это:

localStorage.removeItem('Ключ');

При выполнении такого кода будет удалено значение, которое соответствует ключу с названием «Ключ». Есть другой способ удаления значения:

delete localStorage['Ключ'];

Бывают случаи, когда необходимо удалить вообще все данные из локального хранилища — все ключи и значения. Для этого используется метод clear

localStorage.clear();

Если вы новичок в компьютерной технике, то должны прислушаться к совету и изменить место хранения файлов (фотографии, документы, музыку и др.). Дело в том, что компьютер штука не предсказуемая, и в любой момент вы можете потерять всё, что копили и сохраняли на нём  годами.

Особенно обидно, когда теряешь фотографии и видео, сделанные во время отдыха или любимые фильмы, скачанные из интернета. А если вы работаете на компьютере, то созданные вами документы для вас не менее важны.

Содержание:

  • Почему надо хранить свои файлы на другом носителе?
    • Как изменить путь для сохранения файлов в Windows 10
      • Видео: Как изменить место хранения файлов

Почему надо хранить свои файлы на другом носителе?

Как быстро изменить место хранения файлов в Windows 10

Даже если вы умеете ремонтировать компьютер, то это не дает гарантии, что ваши файлы всегда будут в сохранности. Особенно опасно хранить их на диске с операционной системой. Как известно, операционная система  по каким-то причинам может в любую минуту не запуститься.

Причин для этого может быть много, начиная от выхода из строя жесткого диска, и кончая, скачка напряжения в электросети. Даже неправильное выключение компьютера может вывести систему из строя.

А если у вас и операционная система и все ваши файлы хранятся на одном жестком диске, и вы не дублируете их на внешние носители или каком-нибудь облачном сервисе в интернете, то велика вероятность того, что в один прекрасный день вы просто лишитесь навсегда.

Бесплатные облачные сервисы для хранения ваших файлов

Как создать свой файлообменник на Яндекс диске

Как загрузить файлы на Яндекс диск

Обидно, но через это прошли почти все пользователи компьютера. И я в том числе.

Иногда это происходит по не знанию, иногда от беспечности, а иногда от банальной лени. Но результат всегда один – потеря всех многолетних трудов.

С первых дней работы на компьютере необходимо учится правильно хранить файлы. Если у вас один жесткий диск, то для хранения файлов желательно установить еще один (более объемный) или, в крайнем случае, создать на одном диске еще один раздел и хранить файлы на нем.

SSD диск вообще не предназначен для хранения файлов.

Установка второго жесткого диска

Как разделить системный диск без потери данных

Как изменить путь для сохранения файлов в Windows 10

Многим, кто начинал осваивать компьютер лет 5-10 назад, не нравится операционная система Windows 10. Точно так же было и с Windows 7 и с Windows 8. Мне тоже поначалу все новые системы не нравились, но со временем неприятие проходило и приходило понимание, что новое даже лучше старого.

Вот, например, в старых системах не предусматривался перенос  хранения файлов на другом жестком диске. Это приходилось делать вручную, и не всем было под силу. А сейчас настроить хранение своих файлов можно за пару минут без боязни что-нибудь сделать не так.

Сейчас мы с вами проделаем это на примере, и вы убедитесь сами.

И так, кликаем левой кнопкой мыши по кнопке «Пуск» и чуть выше слева, кликаем по шестеренке «Параметры».

Как быстро изменить место хранения файлов в Windows 10

Откроется окно «Параметры», в котором необходимо выбрать  пункт «Система».

Как быстро изменить место хранения файлов в Windows 10

Чтобы по другому попасть в параметр «Система» можно кликнуть правой кнопкой мыши по кнопке «Пуск» и выбрать в выпадающем контекстном меню пункт  «Система».

Как быстро изменить место хранения файлов в Windows 10

В первых версиях Windows 10 на вкладке «Система» был пункт «Хранилище».

Как быстро изменить место хранения файлов в Windows 10

В новых версиях слева необходимо выбрать пункт «Память устройства», а в окне справа перейти по ссылке «Изменить место сохранения нового содержимого».

Как быстро изменить место хранения файлов в Windows 10

Теперь каждому виду файлов можно задать определенное место на другом жестком диске или разделе диска. Для этого справа от записи «Windows 10» кликните по галочке и в открывшемся списке выберите, где хранить эти файлы. Не забудьте после этого нажать справа кнопку «Сохранить».

Как быстро изменить место хранения файлов в Windows 10

У меня, как вы видите, много дисков, и каждый из них переименован, чтобы с первого взгляда было понятно, что на них хранится. Можете так же переименовать свои диски или разделы.

Как переименовать жесткий диск, его разделы или флешку

Теперь все новые файлы у вас будут сохраняться в новом месте, а старые файлы придется перенести вручную.

Видео: Как изменить место хранения файлов

 

Удачи Вам!

Привет! В этой статье я бы хотел поговорить про LocalStorage, его методы и особенности. Статью можно посмотреть в формате видео по этой ссылке. Ну что, приступим?

И так, что же это такое. LocalStorage это свойство объекта window, предназначенное для хранения пар ключ/значение в браузере. В зависимости от браузера, мы можем сохранять до 5 мб данных. Но тогда возникает логичный вопрос, зачем нам localStorage, если данные мы можем сохранять данные в обычных переменных? Ответ очень прост, все что мы запишим в localStorage, останется там после перезагрузки страницы и даже после закрытия браузера. Теперь поговорим о том как мы можем взаимодействовать с localStorage.

Запись в LocalStorage

Чтобы сохранить данные можем использовать метод setItem(key, value) у localStorage. Этод метод принимает два аргумента: ключ по которому мы будем сохранять информацию и само значение, которое мы хотим сохранить. Например:

localStorage.setItem('name', 'Alex');

Для просмотра наших записей надо открыть DevTools там найти вкладку Application и там обязательно будет LocalStorage

Чтение из LocalStorage

Теперь конечно же хочется получить эти данные. Для этого воспользуемся методом getItem(key). Результат можно вывести в консоль, или сохранить в переменную.

console.log(localStorage.getItem('name'));

Только строки

Как видите, все просто, но есть один маленький нюанс. Значение, которое мы записываем должно быть строкой. Давайте попробуем добавить поле age со значением 5. Для этого напишем:

localStorage.setItem('age', 5);

Сохраняем файл. И что мы видим? Ошибок никаких нет, а если перейти во вкладку Application, то мы увидим что запись прошла успешно. Это конечно же так, но при записи пятерка стала строкой, то есть была автоматически приведена к типу string. Это не то чтобы плохо, но может привести к неожиданному поведению, к примеру при строгом сравнении. Я бы советовал привести строку к числу, это можно сделать вот так:

const age = +localStorage.getItem('age');

Если с примитивами все просто, то что на счет объектов? Создадим объект user и попробуем записать его в LocalStorage:

const user = {
  name: 'alex', 
  age: 5
};

localStorage.setItem('user', user);

Переходим во вкладку Application и видим [objectObject].

И есть одна небольшая проблемка у этой строки не будет полей, которые мы определили в объекте user. Это просто обычная строка. И в исходный вид это уже никак не вернуть. Для того, чтобы записать объект в localStorage надо сделать его строкой. У нас как раз есть прекрасный формат под это, и имя его json. Для преобразования объекта в строку нужно использовать JSON.stringify:

localStorage.setItem('user', JSON.stringify(user));

Теперь все записалось корректно:

Чтобы получить объект в первозданном состоянии используем метод parse у JSON:

JSON.parse(localStorage.getItem('user'));

Полученый результат можем записать в консоль, или сохранить в переменную.

Удаление из LocalStorage

Мы научились записывать и получать элементы, теперь надо научится их удалять. Для этого будем использовать метод  removeItem(key) который удалит поле с ключом key.

localStorage.removeItem('user');

Так же во вкладке Application мы можем выделить нужный нам рядок и нажать на крестик, что тоже приведет к удалению.

Очистка LocalStorage

Чтобы очистить все поля мы можем использовать метод clear():

localStorage.clear();

Вариант из Application:

Я рекомендую так делать, только тогда, когда вы на 200% уверены что все данные заносили только вы, и после удаления чего либо ваш сайт не начнет вести себя некорректно.

Событие storage

Если у вас есть потребность, или желание прослушивать изменение в localStorage, то можно просто добавить слушатель событий на 'storage':

window.addEventListener('storage', (event) => console.log(event));

При каждом изменении localStorage генерируется событие storage. Оно отрабатывает на всех вкладках, на которых открыт наш сайт, кроме той, где мы создали это событие. В event хранятся название поля которое мы затронули, старое значение, новое значение, url документа и storageArea. Если интересно, крайне рекомендую переписать этот кусок кода себе, открыть две вкладки вашего локалхоста и посмотреть как это работает.

Также, надо держать в голове что самый «топовый» браузер, то бишь IE вызывает событие 'storage' даже если данные не изменились, что является некорректным поведением. Поэтому если вам не пофиг на екплоер и вы не хотите каких-то нежданчиков, то надо явно сравнивать новое и старое значение, которые мы можем получить из event.

Итоги

Особенности:

  • Благодаря localStorage мы можем хранить пары ключ — значение в браузере

  • Данные остаются в хранилище даже после выключения компьютера

  • Данные привязаны к конкретному браузеру и источнику

  • И ключ и значения должны быть строками

Методы:

  • setItem(key, value) – записать пару ключ/значение

  • getItem(key) – получить данные по ключу key

  • removeItem(key) – удалить значение по ключу key

  • clear() — очистить хранилище

Один из наших читателей прислал статью с рассказом о HTML5 LocalStorage в браузерах. Передаём ему слово.

Я постарался написать самое простое и понятное руководство по использованию технологии localStorage. Статья получилась совсем небольшой, в силу того, что и сама технология и средства работы с ней не несут ничего сложного. Для старта вам достаточно чуть-чуть знать JavaScript. Итак, уделите этой статье 10 минут и вы смело сможете добавить себе в резюме строчку «умею работать с localStorage».

Что такое localStorage?

Так выглядит JavaScript объект:

var myCar = {
  wheels: 4,
  doors: 4,
  engine: 1,
  name: "Jaguar"
}

А так выглядит JSON. Почти так же как обычный js-объект, только все свойства должны быть заключены в кавычки.

{
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}

Чтобы понять, что такое localStorage, просто представьте, что где-то у вас в браузере встроен такой объект, которым мы можем пользоваться. При этом данный объект не очищает значения, которые мы туда запишем, если мы перезагрузим страницу или даже совсем закроем браузер.

Если говорить языком JavaScript, то localStorage это свойство глобального объекта браузера (window). К нему можно обращаться как window.localStorage или просто localStorage.

Еще стоит сказать, что у браузера существует клон localStorage, который называется sessionStorage. Их разница только в том, что последний хранит данные только для одной вкладки (сессии) и просто очистит свое пространство как только мы закроем вкладку

Давайте посмотрим на него вживую. Например, в Google Chrome вам надо открыть DevTools (F12), перейти на вкладку «Resourses» и на левой панели вы увидите localStorage для данного домена и все значения, что оно содержит.

localStorage

Кстати, вы должны знать как localStorage работает с доменами. Для каждого домена ваш браузер создает свой объект localStorage, и редактировать или просматривать его можно только на этом домене. Например, с домена mydomain-1.com нельзя получить доступ к localStorage вашего mydomain-2.com.

Зачем мне нужен localStorage?

LocalStorage нужен только для одного — хранить определенные данные между сессиями пользователя. Можно придумать тысячу и одну вещь, которую можно хранить в локальном хранилище браузера. Например, браузерные игры, которые используют его как сохраненку, или записать момент, на котором пользователь остановился при просмотре видео, различные данные для форм и т.д.

Как мне начать работать с localStorage?

Очень просто.

Работа с localStorage очень напоминает работу с объектами в JavaScript. Существует несколько методов для работы с ним.

localStorage.setItem('ключ', 'значение')

Метод который добавляет в localStorage новый ключ со значением (а если такой ключ уже существует, то перезаписывает новым значением). Пишем, например, localStorage.setItem(‘myKey’, ‘myValue’);

localStorage.getItem('ключ')

Берем определенное значение из хранилища по ключу.

localStorage.removeItem("Ключ")

Удаляем ключ

localStorage.clear()

Очищаем все хранилище

Сейчас вы можете открыть вкладку с localStorage вашего браузера и самостоятельно потренироваться записывать и извлекать данные из этого хранилища. Если что — весь код пишем в js-файл.

//Добавляем или изменяем значение:
localStorage.setItem('myKey', 'myValue'); //теперь у вас в localStorage хранится ключ "myKey" cо значением "myValue"

//Выводим его в консоль:
var localValue = localStorage.getItem('myKey');
console.log(localValue); //"myValue"

//удаляем:
localStorage.removeItem("myKey");

//очищаем все хранилище
localStorage.clear()

То же самое, только с квадратными скобками:

localStorage["Ключ"] = "Значение" //установка значения
localStorage["Ключ"] // Получение значения
delete localStorage["Ключ"] // Удаление значения

Также хочется отметить, что localStorage отлично работает и с вложенными структурами, например, объектами.

//создадим объект
var obj = {
	item1: 1,
	item2: [123, "two", 3.0],
	item3:"hello"
};

var serialObj = JSON.stringify(obj); //сериализуем его

localStorage.setItem("myKey", serialObj); //запишем его в хранилище по ключу "myKey"

var returnObj = JSON.parse(localStorage.getItem("myKey")) //спарсим его обратно объект

Вы также должны знать, что браузеры выделяют 5мб под localStorage. И если вы его превысите — получите исключение QUOTA_EXCEEDED_ERR. Кстати, c его помощью можно проверять есть ли в вашем хранилище еще место.

try {
  localStorage.setItem('ключ', 'значение');
} catch (e) {
  if (e == QUOTA_EXCEEDED_ERR) {
   alert('Превышен лимит');
  }
}

Вместо заключения

Мне бы хотелось, чтобы из этой небольшой статьи разработчики сделали для себя простой вывод, что данная технология уже вовсю может использоваться у вас на проектах. У нее хорошая стандартизация и отличная поддержка, которая со временем только развивается.

В этой статье рассмотрим технологии localStorage и sessionStorage, которые предназначены для хранения данных в формате ключ-значение непосредственно в браузере.

Общие сведения о localStorage и sessionStorage

LocalStorage и sessionStorage – это веб-хранилища, находящиеся в браузере пользователя и предназначенные для хранения данных.

Хранение информации в этих объектах осуществляется в формате «ключ-значение». Ключ и значение – это всегда строки.

Т.е., по сути, каждое хранилище представляет собой вот такой объект:

{
  'key1': 'value1',
  'key2': 'value2',
  'key3': 'value3',
  ...
}

Если в качестве значения указать не строку, а какой-то другой тип данных, например, объект, то он будет, перед тем как туда записан, автоматически преобразован в строку (т.е. так как будто мы для него явно вызвали метод toString()).

Таким образом, в localStorage и sessionStorage:

  • данные хранятся в виде пар «ключ-значение»;
  • хранить можно только строки;
  • если необходимо сохранить в эти хранилища массивы и объекты, то перед тем, как это сделать их нужно их сначала преобразовать в строки, например, используя метод JSON.stringify() (для обратного преобразования использовать JSON.parse()).

Где можно увидеть эти хранилища?

Например, в Google Chrome для этого необходимо открыть «Инструменты разработчика», перейти на вкладку «Application». Здесь они находятся на левой панели в разделе «Storage». При выборе источника вы увидите какие данные содержатся соответственно в sessionStorage и localStorage.

sessionStorage vs localStorage

SessionStorage хранит данные только во время текущей сессии (для вкладки, пока она открыта). Закрытие вкладки или браузера приводит к очищению этих данных. При этом данные сохраняются при обновлении страницы или отображение в этой вкладке другой страницы из этого же источника.

В отличие от sessionStorage, localStorage хранит данные в течение неограниченного количества времени. Они сохраняются при закрытии браузера и выключения компьютера. Но, хоть эти данные могут храниться бесконечно в браузере, обычный пользователь может их удалить, например выполнив очистку истории (при включенной опции «файлы cookie и другие данные сайтов»).

localStorage vs cookies

Cookie и localStorage используются для хранения информации в браузере.

Но что лучше использовать в том или ином случае? Чтобы в этом вопросе ориентироваться необходимо знать различия между ними:

  • по месту хранения (куки и localStorage хранятся на компьютере пользователя в браузере);
  • по размеру (cookies ограничены 4 Кбайт, а localStorage – 5 Мбайт);
  • по включению этих данных в HTTP-заголовок (куки в отличие от данных локального хранилища включаются в состав запроса при отправке его на сервер, а также сервер их может добавлять в ответ при отправке его клиенту; таким образом cookies являются частью HTTP-протокола, и увеличивают объём передаваемых данных от клиента серверу и обратно);
  • по доступности данных (печеньки можно прочитать и установить как на сервере, так и на клиенте; на клиенте доступны все куки, кроме тех, у которых установлен флаг HttpOnly; localStorage доступен только в браузере посредством JavaScript API;
  • по времени хранения данных (куки хранятся ограниченное время (до конца сеанса или истечения указанной даты), нахождение данных в локальном хранилище не ограничено по времени);
  • по удобству использования в JavaScript (работа с localStorage в JavaScript организовано намного удобнее чем с cookie);
  • по необходимости информирования пользователей Евросоюза (при использовании cookies сайт в ЕС должен получать на это разрешение от пользователей; для данных локального хранилища это не требуется);
  • по назначению (куки в основном используются для управления сеансом, персонализации и отслеживания действий пользователя, в то время как localStorage применяется в качестве обычного локального хранилища информации на компьютере пользователя).

Что использовать: localStorage или cookie? На самом деле, ответ на этот вопрос очень прост. Если данные нужны на стороне сервера, то в этом случае лучше использовать cookie. Т.к. куки отправляются с каждым HTTP-запросом на сервер, а также их там можно установить (они добавляются в ответ и браузер при его получении их сохранит).

Если вы работаете с данными только на клиенте (в браузере), то тогда более предпочтительно использовать localStorage.

Безопасность данных

Хранилище localStorage привязана к источнику (домену, протоколу и порту). Данные, находящиеся в некотором источнике, доступны только на страницах этого же источника. К данным другого источника обратиться нельзя.

SessionStorage ограничена вообще одной вкладкой браузера. Это означает, что с помощью JavaScript нельзя получить доступ к данным другой вкладки даже если она имеет тот же источник.

Работа с localStorage и sessionStorage

Объекты localStorage и sessionStorage являются свойствами глобального объекта window. А это значит к ним можно обращаться соответственно как window.localStorage и window.sessionStorage, или просто localStorage и sessionStorage.

Для работы с localStorage и sessionStorage нам доступен одинаковый набор свойств и методов:

  • getItem(key) – получает значение по ключу (key);
  • setItem(key, value) – добавляет ключ (key) со значением value (если в хранилище уже есть этот ключ, то в этом случае будет просто обновлено его значение);
  • removeItem(key) – удаляет ключ (key);
  • clear() – очищает всё хранилище;
  • key(index) – получает ключ по индексу (в основном используется в операциях перебора);
  • length – количество ключей в хранилище;

Событие storage

Событие storage предназначено для информирования о том, что локальное хранилище обновлено. При этом событие генерируется на всех вкладках, принадлежащих этому источнику, кроме той, которая вызвала эти изменения в localStorage.

Данное событие возникает на объекте window:

window.addEventListener('storage', event => {
  console.log(event);
});

Если посмотреть объект event, то среди свойств можно увидеть следующие:

  • key – ключ, значение которого изменено (возвращает null при очистке хранилища);
  • oldValue – предыдущее значение (null – если ключ только что был добавлен);
  • newValue – новое значение (null – при удалении ключа);
  • storageArea – изменённый объект-хранилище;
  • url – url документа, в котором произошло обновление хранилища.

Создадим пример, который будет следить за изменениями в localStorage и обновлять в соответствии с ними данные на страницах.

Для этого создадим две страницы (например, «page-1.html» и «page-2.html») и поместим в них следующий код:

  <div id="list">
  <button type="button">Добавить</button>
  <ul></ul>
</div>

<script>
  const elementList = document.querySelector('#list');
  const elementBtn = elementList.querySelector('button');
  const elementUl = elementList.querySelector('ul');

  function updateStorage() {
    const data = [];
    for (let element of elementUl.querySelectorAll('li')) {
      data.push(element.textContent);
    }
    localStorage['items'] = JSON.stringify(data);
  }

  function updateUl(items) {
    const html = [];
    for (let item of items) {
      html.push(`<li>${item}</li>`);
    }
    elementUl.innerHTML = html.join('');
  }

  elementBtn.onclick = () => {
    const elementsLi = elementUl.querySelectorAll('li');
    const newLi = document.createElement('li');
    newLi.textContent = elementsLi.length + 1;
    elementUl.append(newLi);
    updateStorage();
  }

  window.onstorage = event => {
    updateUl(JSON.parse(event.newValue));
  }
</script>

1. Добавим ключ в localStorage, после этого получим его значение, а затем удалим:

// добавим в localStorage ключ «bgColor» со значением «green»
localStorage.setItem('bgColor', 'green');
// получим значение ключа «bgColor» и сохраним его в переменную «bgColor»
const bgColor = localStorage.getItem('bgColor');
// удалим ключ «bgColor»
localStorage.removeItem('bgColor');

Кроме указанных методов, можно также использовать квадратные скобки:

localStorage['bgColor'] = 'green';
const bgColor = localStorage['bgColor'];
delete localStorage['bgColor'];

2. Удалим все элементы из хранилища localStorage:

localStorage.clear();

3. Переберём все ключи, находящиеся в localStorage:

// localStorage.length - количество ключей в хранилище
for (let i = 0, length = localStorage.length; i < length; i++) {
  // ключ
  const key = localStorage.key(i);
  // значение
  const value = localStorage[key];
  console.log(`${key}: ${value}`);
}

4. Пример, в котором сохраним объект в localStorage:

// объект
const obj = {
  prop1: 'value1',
  prop2: 'value2',
  prop3: 'value3'
}

//сохраним объект в LocalStorage предварительно преобразовав его в строку JSON
localStorage['mykey'] = JSON.stringify(obj);
// если ключ «mykey» имеется в localStorage, то...
if (localStorage['mykey'] {
  // получим из LocalStorage значение ключа «mykey» и преобразуем его с помощью метода JSON.parse() в объект
  const newObj = JSON.parse(localStorage['mykey']);
}

В этом коде сохранение объекта выполняется посредством его сериализации в строку JSON посредством JSON.stringify().

5. Проверим поддерживает ли браузер веб-хранилища?

if (typeof(Storage) !== 'undefined') {
  // поддерживает localStorage
} else {
  // браузер не поддерживает веб-хранилище
}

6. Попробуем добавить ключ в localStorage, но если в хранилище закончилось место (QUOTA_EXCEEDED_ERR), то выведем в консоль сообщение об этом:

try {
  localStorage['theme'] = 'dark';
} catch (e) {
  if (e == QUOTA_EXCEEDED_ERR) {
    console.log('Не достаточно места в localStorage');
  }
}

7. Добавим дату срока действия к элементам, которую затем будем использовать для их очистки (удалять те из них дата срока действия которых превышает текущую):

// данные полученные из localStorage
const data = [
  {
    id: '1608467',
    title: '6.26" Смартфон Huawei Nova 5T 128 ГБ фиолетовый',
    timestamp: 1583020800000 // 01.03.2020
  },
  {
    id: '1348312',
    title: '6.1" Смартфон Huawei P30 128 ГБ синий',
    timestamp: 1585872000000 // 03.04.2020
  },
  {
    id: '1394820',
    title: '6.1" Смартфон Apple iPhone 11 128 ГБ черный',
    timestamp: 1586476800000 // 10.04.2020
  }
];
// новый массив
const newData = [];

// добавим в newData элементы, значение timestamp у которых больше текущей даты
newData.forEach(element => {
  if (element.timestamp > Date.now()) {
    newData.push(element);
  }
});

// сохраним newData в LocalStorage
localStorage.setItem('items', JSON.stringify(newData));

Задачи

1. Записать момент, на котором пользователь остановился при просмотре видео в localStorage, а затем восстанавливать его при открытии страницы.

2. Сохранить данные формы в хранилище, а затем восстановить их при перезагрузки страницы.

3. Написать код, сохраняющий историю просмотров страниц сайта в localStorage.

В этой статье вы узнаете о том, что такое localStorage и на рабочем примере узнаем то, как с ним работать в JavaScript.

Мне нравится делать обучающие материалы о том, как создавать небольшие приложения буквально с нуля, используя чистый JavaScript. Создание to-do списка это распространенная идея для создания приложения, а без базы данных, в которую можно положить задачи, она становится особенной полезной, но добавляет некоторые сложности для начинающих.

Однако, даже без базы данных, мы можем использовать встроенное в браузер веб-хранилище, чтобы сохранять туда задачи из to-do списка.Такое приложение было бы особенно полезным для создания быстрых заметок. Вы бы просто установили ярлык на приложение при запуске новой вкладки и задачи to-do будут находиться на вашем компьютере пока вы не очистите кэш.

Вот то, что мы сегодня будем делать:

Демка

Исходник

Для того, чтобы понимать статью, вам нужно знать основы HTML и CSS, понимать типы данных и синтаксис JavaScript, вместе с DOM манипуляциями.

Целью этой статьи является создание быстрого приложения, которое будет хранить to-do элементы в веб-хранилище браузера на вашем компьютере и показывать их на фронте. Посмотрите пример.

Что такое веб-хранилище

В веб-хранилище хранятся данные пользователя браузера. Есть два типа веб-хранилищ:

localStorage — это данные, которые хранятся бессрочно и будут доступны даже после перезагрузки браузера.

sessionStorage — это данные, которые стираются после того, как окно браузера закрывается.

Веб-хранилище довольно удобно для сохранения данных, таких как предпочтения пользователей (светлая или темная цветовая схема на сайте и тп), сохранение товаров, положенных в корзину или запоминание того, что пользователь залогинен на сайте.

До этого, для запоминания такого рода локальных, временных данных, использовались только кукисы. В локальном веб-хранилище вы можете хранить значительно больше данных (5MB vs 4KB) и не обращаться к ним, при каждом HTTP вызове, таким образом, это может быть лучшим вариантом для хранилища данных на стороне клиента.

Вот обзор методов localStorage

setItem() — добавляет пару ключ-значение в локальное веб-хранилище

getItem() — получает значение по ключу

removeItem() — удаляет элемент по ключу

clear() — очищает хранилище

Вы можете посмотреть то, что находится в локальном хранилище, зайдя в консоль и введя в неё localStorage.

Storage {length: 0}

Добавление данных в localStorage очень простой процесс, вы можете использовать setItem() метод. Я буду использовать общепринятые имена для пары ключ-значение, но они могут быть любой производной строкой.

localStorage.setItem('key', 'value')

Теперь, если вы проверите localStorage в консоле, то вы там увидите новый ключ и значение.

Storage {key: "value", length: 1}

Если вы хотите получить значение конкретного ключа, то вам надо будет использовать метод getItem().

localStorage.getItem('key')
value

И наконец, вы можете удалить данные с помощью removeItem().

localStorage.removeItem('key')

А используя clear(), вы очистите всё веб-хранилище.

localStorage.clear()

Теперь мы можем приступить к созданию приложения.

Подготавливаем фронт

Сначала мы создадим простенькую HTML разметку в index.html. Я работаю в Primitive(мой минималистический HTML Фреймворк) для стилей, потому что это то, что я всегда использую, если мне нужен быстрый фронт.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>New Tab App</title>
<link rel="stylesheet" href="https://unpkg.com/primitive-ui/dist/css/main.css" />
  </head>
<body>
    <div class="small-container">
      <h1>New Tab App</h1>
<!-- more will go here -->
    </div>
  
    <script src="js/scripts.js"></script>
  </body>
</html>

Тут нам надо уделить внимание настройке трёх вещей:

Текстовой input— для добавления новых элементов.

Список — то место, куда будут добавляться новые элементы на фронте.

Кнопка — для сброса всех элементов.

Добавьте этот код туда, где стоит комментарий <! — more will go here — >

<form>
  <input id="item" type="text" placeholder="New" required />
</form>
<h2>Items</h2>
<ul></ul>
<button>Clear All</button>

И вот, как всё это будет выглядеть.

Далее мы сосредоточимся на написании функционала в JavaScript.

Перед тем, как интегрировать всё это с локальным веб-хранилищем, давайте подцепим на JS форму и список, через которые мы хотим добавлять данные в input и выводить их в ul.

Для начала, я собираюсь объявить несколько переменных для элементов на странице.

const form = document.querySelector('form')
const ul = document.querySelector('ul')
const button = document.querySelector('button')
const input = document.getElementById('item')

Далее, я напишу функцию, которая создаст элемент li, так как этот функционал нам потребуется очень часто. Я назову функцию liMaker(). Она просто будет создавать элемент li, выставлять ему текст, который будет как параметр и добавлять созданный li в ul.

const liMaker = text => {
  const li = document.createElement('li')
  li.textContent = text
  ul.appendChild(li)
}

Далее, я собираюсь добавить прослушиватель события на форму, которая связана с submit — событие, которое будет происходить всякий раз, как мы нажмем на enter в форме.e.preventDefault() предотвратит отправку формы при сабмите, это нам не нужно, так как мы не собираемся отправлять никаких данных на сервер.

Вместо этого, форма отправит значение input. Мы вызовем функцию liMaker(), которая создаст элемент с текстом, который будет значением input и далее, мы добавим это в DOM. И под конец, мы выставим значение input на пустую строку, таким образом вам не придётся вручную стирать то, что вы только написали.

form.addEventListener('submit', function(e) {
  e.preventDefault()
liMaker(input.value)
  input.value = ''
})

Теперь, с буквально пустяковым количеством кода на борту, мы имеем небольшое приложение, которое добавляет to-do элементы в список задач.

Но, так как мы нигде не сохраняем наши данные, то при закрытии или обновлении браузера, введенные нами элементы исчезнут. Последним шагом будет интеграция нашего приложения с локальным хранилищем, для того, чтобы данные оставались в нём и после перезагрузки страницы, и после перезагрузки браузера.

Интегрируем локальное хранилище

Сейчас мы добавим немного функционала в наше приложение. Во первых, каждый раз, когда форму будут сабмитить, значение из input будет добавлено в localStorage вместе с мгновенным отображением в списке задач. Также, нам нужно будет пробежаться циклом по всему локальному хранилищу и показать элементы этого хранилища сверху списка существующих задач. Ну и под конец, мы добавим кнопку “Clear All”, которая удалит все элементы не только из локального хранилища, но и из списка ul.

Давайте сначала создадим пустой массив и создадим в localStorage ключ под названием itemslocalStorage в виде значений ключей принимает только строки, к тому же, нам надо хранить задачи в массиве.

Мы можем обойти это ограничение с помощью JSON.stringify(), чтобы конвертировать массив в строку. А уже потом мы применим JSON.parse() для конвертирования содержимого localStorage в какой-нибудь рабочий формат, который мы положим в переменную data. Вставьте этот код под всем, что мы написали выше.

let itemsArray = []

localStorage.setItem('items', JSON.stringify(itemsArray))
const data = JSON.parse(localStorage.getItem('items'))

В слушателе событий мы будем отправлять каждое новое значение input в массив, а затем добавлять в localStorage новое значение с уже обновленным массивом.

e.preventDefault()
itemsArray.push(input.value)
localStorage.setItem('items', JSON.stringify(itemsArray))

Далее, мы собираемся пробежаться по всему содержимому переменной data, которая содержит всё из нашего localStorage в таком виде, в котором мы можем работать с этими данным в JavaScript. Затем мы заново запустим liMaker(). Это покажет нам всю нужную информацию в списке при каждом открытии приложения.

data.forEach(item => {
  liMaker(item)
})

И под конец мы добавим событие по клику на кнопку, которая очистит все данные из localStorage и удалит все потомков у ul.

button.addEventListener('click', function() {
  localStorage.clear()
  while (ul.firstChild) {
    ul.removeChild(ul.firstChild)
  }
})

Если всё пройдет хорошо, то данные запишутся в хранилище и покажутся в списке задач, а само хранилище вы сможете проверить введя localStorage в консоли.

Storage {items:
"["Welcome","to","the","Thunderdome"]",
  length: 1}

Но у нас осталась последняя проблема. После закрытия браузера или перезагрузки страницы, вся существующая информация в localStorage пропадает и ничего не остается на нашем фронте. Почему?

Потому, что наш itemsArray сбрасывается каждый раз при запуске скрипта. Мы можем пофиксить эту проблемку, создав условие, которое проверит наличие доступного localStorage:

let items
if (localStorage.getItem('items')) {
  items = JSON.parse(localStorage.getItem('items'))
} else {
  items = []
}

Практичнее было бы использовать тернарный оператор.

let itemsArray = localStorage.getItem('items') ? JSON.parse(localStorage.getItem('items')) : []

Теперь наше приложение завершено. И когда вы вводите какую-либо информацию, а затем обновляете или закрываете окно браузера, данные будут на месте, пока вы самостоятельно не очистите их в настройках браузера или запустив команду localStorage.clear(). Ну а вот и полный код JavaScript.

const form = document.querySelector('form')
const ul = document.querySelector('ul')
const button = document.querySelector('button')
const input = document.getElementById('item')
let itemsArray = localStorage.getItem('items') ? JSON.parse(localStorage.getItem('items')) : []
localStorage.setItem('items', JSON.stringify(itemsArray))
const data = JSON.parse(localStorage.getItem('items'))
const liMaker = text => {
  const li = document.createElement('li')
  li.textContent = text
  ul.appendChild(li)
}
form.addEventListener('submit', function(e) {
  e.preventDefault()
itemsArray.push(input.value)
  localStorage.setItem('items', JSON.stringify(itemsArray))
  liMaker(input.value)
  input.value = ''
})
data.forEach(item => {
  liMaker(item)
})
button.addEventListener('click', function() {
  localStorage.clear()
  while (ul.firstChild) {
    ul.removeChild(ul.firstChild)
  }
})

Заключение

В этом руководстве мы узнали о том, как сделать простое to-do приложение, которое можно использовать для быстрого напоминания о текущих задачах, просто вызвав новую вкладку, используя HTML5 веб-хранилище. Я надеюсь, что теперь у вас появилось лучшее понимание локального хранилища и того, как интегрировать его в простое приложение.

Почитайте про применение localStorage в следующей статье — Используем localStorage в React

Понравилась статья? Поделить с друзьями: