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

Порада

Завжди перевіряйте властивість key в події storage, щоб знати, який саме ключ змінено. Це дозволяє обробляти тільки ті події, які вас цікавлять.

автор: Bond
Порада

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

автор: Bond
Порада

Користуйтесь JSON.stringify() і JSON.parse() для збереження об’єктів у localStorage. storage не підтримує зберігання складних типів даних, лише строки. Наприклад:

localStorage.setItem('user', JSON.stringify({ name: 'Анна', age: 25 }));
автор: Bond

Синтаксис

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`.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 13 4 12.1 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 18 14 3
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад синхронізує тему (наприклад, світла або темна) між вкладками. Якщо користувач змінює тему в одній вкладці, вона автоматично застосовується до інших.

// Установка теми
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);
автор: Bond

Цей приклад оновлює кошик у реальному часі між вкладками. Зміни у кошику в одній вкладці стають видимими в інших.

// Додавання товару до кошика
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' });
автор: Bond

Цей приклад демонструє синхронізацію тексту між кількома вкладками за допомогою StorageEvent. Користувач може вводити текст у поле форми, і зміни миттєво відображатимуться в інших вкладках браузера. Це може бути корисно для створення інструментів спільного редагування або реального часу синхронізації.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід