Spec-Zone.ru › Web APIs

ServiceWorker: метод postMessage()

Базовая поддержка Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод postMessage() интерфейса ServiceWorker отправляет сообщение в рабочий процесс. Первый параметр — данные, которые необходимо отправить в рабочий процесс. Данные могут быть любым JavaScript-объектом, который может быть обработан алгоритмом структурированного клонирования.

Рабочий процесс может отправлять информацию своим клиентам, используя метод postMessage(). Сообщение не будет отправлено обратно этому объекту ServiceWorker, а связанному объекту ServiceWorkerContainer, доступному через navigator.serviceWorker.

Синтаксис

postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

Параметры

message

Объект, который необходимо передать в рабочий процесс; он будет находиться в поле data в событии, переданном событию message. Это может быть любой JavaScript-объект, обработанный алгоритмом структурированного клонирования.

Параметр message является обязательным. Если данные, передаваемые в рабочий процесс, не важны, null или undefined должны быть явно указаны.

transfer Необязательно

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

options Необязательно

Необязательный объект, содержащий следующие свойства:

transfer Необязательно

Имеет то же значение, что и параметр transfer.

Возвращаемое значение

Ничего (undefined).

Исключения

SyntaxError

Выбрасывается, если параметр message не указан.

Примеры

В этом примере создается ServiceWorker и сразу же отправляется сообщение:

navigator.serviceWorker.register("service-worker.js");

navigator.serviceWorker.ready.then((registration) => {
  registration.active.postMessage(
    "Test message sent immediately after creation",
  );
});

Для получения сообщения рабочий процесс, в service-worker.js должен прослушивать событие message в своем глобальном пространстве имен.

// This must be in `service-worker.js`
addEventListener("message", (event) => {
  console.log(`Message received: ${event.data}`);
});

Обратите внимание, что рабочий процесс может отправлять сообщения обратно в основной поток, используя метод postMessage(). Для их получения основной поток должен прослушивать событие message в объекте ServiceWorkerContainer.

Спецификации

Спецификация
Рабочие процессы
# dom-serviceworker-postmessage
Рабочие процессы
# dom-serviceworker-postmessage-message-options

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
postMessage 40 17 44 27 11.1 40 44 27 11.3 4.0 40

См. также

  • Интерфейс ServiceWorker, к которому он принадлежит.
  • Его аналог, метод postMessage(), который должен использовать рабочий процесс для отправки сообщения обратно связанному объекту ServiceWorkerContainer.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/postMessage

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API