Клиент: метод postMessage()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.
Примечание: Эта функция доступна только в Сервис-воркерах.
Метод postMessage() интерфейса Client позволяет сервисному рабочему отправлять сообщение клиенту (объекту Window, Worker или SharedWorker). Сообщение принимается в событии message объекта navigator.serviceWorker.
Синтаксис
postMessage(message) postMessage(message, transfer) postMessage(message, options)
Параметры
message-
Сообщение для отправки клиенту. Это может быть любой объект, допускающий структурное клонирование.
transferНеобязательно-
Необязательный массив объектов, подлежащих передаче. Владение этими объектами передаётся получающей стороне, и они больше не доступны на стороне отправки. Эти передаваемые объекты должны быть присоединены к сообщению; в противном случае они будут перемещены, но не станут доступными для получения на принимающей стороне.
optionsНеобязательно-
Необязательный объект, содержащий следующие свойства:
transferНеобязательно-
Имеет то же значение, что и параметр
transfer.
Возвращаемое значение
None (undefined).
Примеры
Ниже приведен код, отправляющий сообщение из сервисного работника клиенту. Клиент извлекается с помощью метода get() объекта clients, который является глобальным в области видимости сервисного работника.
addEventListener("fetch", (event) => {
event.waitUntil(
(async () => {
// Exit early if we don't have access to the client.
// Eg, if it's cross-origin.
if (!event.clientId) return;
// Get the client.
const client = await self.clients.get(event.clientId);
// Exit early if we don't get the client.
// Eg, if it closed.
if (!client) return;
// Send a message to the client.
client.postMessage({
msg: "Hey I just got a fetch from you!",
url: event.request.url,
});
})(),
);
});
Получение этого сообщения:
navigator.serviceWorker.addEventListener("message", (event) => {
console.log(event.data.msg, event.data.url);
});
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
© 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/Client/postMessage