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