JavaScript ServiceWorker.postMessage() — зв'язок зі сторінкою


Метод postMessage() надсилає повідомлення сервісному робітнику зі сторінки.

автор: NagarD

Загальний опис

Робітник живе окремо й доступу до сторінки не має — спілкування можливе лише повідомленнями.

Типові команди: «скинь кеш», «оновись зараз», «завантаж це наперед».

Щоб робітник міг відповісти, є два шляхи. Простіший — MessageChannel: створюєш канал, віддаєш робітнику один його кінець, слухаєш другий. Робітник може й сам звернутись до всіх відкритих вкладок через clients.matchAll().

Найчастіший практичний випадок — команда skipWaiting: новий робітник за замовчуванням чекає, доки закриються всі вкладки, а ця команда каже йому активуватись негайно.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
postMessage 45+ 44+ 11.1+ 32+ 17+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
postMessage 45+ yes yes 11.3+

Приклади

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

Команда «оновись зараз» і відповідь через канал.

// top-level await працює лише в модулях — тут той самий код в async-функції
(async () => {
    // --- сторінка ---
    const registration = await navigator.serviceWorker.ready;

    // новий робітник, оновись негайно
    registration.waiting?.postMessage({ type: 'SKIP_WAITING' });

    // із відповіддю — через канал
    const channel = new MessageChannel();

    channel.port1.onmessage = event => {
        console.log('Робітник відповів:', event.data);
    };

    registration.active.postMessage({ type: 'GET_VERSION' }, [channel.port2]);

    // --- усередині sw.js ---
    // self.addEventListener('message', event => {
    //     if (event.data.type === 'SKIP_WAITING') {
    //         self.skipWaiting();
    //     }
    //
    //     event.ports[0]?.postMessage({ version: 'v1' });
    // });
})();
автор: NagarD

Коментарі

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

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

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

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

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

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

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

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

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

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

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