JS об'єкт StorageEvent
Загальний опис
StorageEvent — це події, які виникають, коли дані у веб-сховищі (localStorage або sessionStorage) змінюються, і ці зміни стають доступними іншим вкладкам або вікнам браузера. Подія storage спрацьовує тільки у вкладках або вікнах, відмінних від того, де відбулася зміна. Це дозволяє синхронізувати стан програми між кількома вкладками.
Подія storage доступна через window і має кілька властивостей:
key— назва зміненої властивості в сховищі.oldValue— попереднє значення цієї властивості.newValue— нове значення властивості.url— URL-адреса сторінки, яка викликала зміну.storageArea— об’єктlocalStorageабоsessionStorage, що зазнав змін.
Приклад використання
window.addEventListener('storage', (event) => {
console.log(`Ключ: ${event.key}`);
console.log(`Старе значення: ${event.oldValue}`);
console.log(`Нове значення: ${event.newValue}`);
console.log(`Джерело: ${event.url}`);
});
У цьому прикладі ми слухаємо події storage. Якщо дані в localStorage або sessionStorage змінюються в іншій вкладці, ми отримуємо детальну інформацію про зміни.
Особливість подій storage полягає в тому, що вони не спрацьовують у тій самій вкладці, де було змінено значення. Наприклад, якщо ви використовуєте localStorage.setItem() у першій вкладці, то подія виникне лише в інших відкритих вкладках з тим самим доменом.
Це дуже корисно для створення програм, які мають підтримувати актуальний стан між вкладками, наприклад, синхронізацію кошиків покупок або інструментів редагування.
автор: Bond
- Порада
-
Завжди перевіряйте властивість
автор: Bondkeyв подіїstorage, щоб знати, який саме ключ змінено. Це дозволяє обробляти тільки ті події, які вас цікавлять. - Порада
-
Не використовуйте
автор: Bondstorageдля передачі великих обсягів даних між вкладками. Веб-сховище оптимізоване для невеликих значень (наприклад, налаштувань), а подіяstorageможе стати перевантаженою. - Порада
-
Користуйтесь
JSON.stringify()іJSON.parse()для збереження об’єктів уlocalStorage.storageне підтримує зберігання складних типів даних, лише строки. Наприклад:
автор: BondlocalStorage.setItem('user', JSON.stringify({ name: 'Анна', age: 25 }));
Синтаксис
window.addEventListener('storage', (event) => {
// Ваш код
});
методи
| Метод | Опис |
|---|---|
| initStorageEvent | Ініціалізує подію `storage` вручну, дозволяючи створювати об'єкти подій для тестування чи кастомних сценаріїв. Застарілий метод, використовується рідко. |
властивості
| Властивість | Опис |
|---|---|
| url | Властивість події `storage`, яка містить URL сторінки, де було змінено `localStorage` або `sessionStorage`. Це допомагає визначити джерело змін. |
| storageArea | Вказує, який саме об'єкт сховища (або `localStorage`, або `sessionStorage`) зазнав змін. |
| oldValue | Попереднє значення ключа у сховищі перед його зміною. Якщо ключ був доданий уперше, `oldValue` дорівнює `null`. |
| newValue | Нове значення ключа після зміни. Якщо ключ був видалений, `newValue` дорівнює `null`. |
| key | Ключ, який було змінено в `localStorage` або `sessionStorage`. Якщо всі дані у сховищі були очищені, `key` буде `null`. |
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 1 | 13 | 4 | 12.1 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 37 | 18 | 14 | 3 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
Цей приклад синхронізує тему (наприклад, світла або темна) між вкладками. Якщо користувач змінює тему в одній вкладці, вона автоматично застосовується до інших.
// Установка теми
function setTheme(theme) {
document.body.className = theme;
localStorage.setItem('theme', theme);
}
// Слухач події
window.addEventListener('storage', (event) => {
if (event.key === 'theme') {
setTheme(event.newValue);
}
});
// Ініціалізація
const savedTheme = localStorage.getItem('theme') || 'light';
setTheme(savedTheme);
Цей приклад оновлює кошик у реальному часі між вкладками. Зміни у кошику в одній вкладці стають видимими в інших.
// Додавання товару до кошика
function addToCart(item) {
const cart = JSON.parse(localStorage.getItem('cart') || '[]');
cart.push(item);
localStorage.setItem('cart', JSON.stringify(cart));
}
// Слухач події
window.addEventListener('storage', (event) => {
if (event.key === 'cart') {
console.log('Оновлений кошик:', JSON.parse(event.newValue));
}
});
// Ініціалізація
addToCart({ id: 1, name: 'Товар 1' });
Цей приклад демонструє синхронізацію тексту між кількома вкладками за допомогою StorageEvent. Користувач може вводити текст у поле форми, і зміни миттєво відображатимуться в інших вкладках браузера. Це може бути корисно для створення інструментів спільного редагування або реального часу синхронізації.
Коментарі
Коментарів ще немає — будьте першим!