Spec-Zone.ru › Web APIs

MessagePort: метод postMessage()

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

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

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

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

Метод postMessage() интерфейса MessagePort отправляет сообщение с порта и, необязательно, передает владение объектами в другие контексты браузера.

Синтаксис

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

Параметры

message

Сообщение, которое вы хотите отправить по каналу. Оно может быть любого базового типа данных. Несколько элементов данных можно отправить в виде массива.

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

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

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

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

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

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

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

None (undefined).

Примеры

В следующем блоке кода показан новый канал, созданный с помощью конструктора MessageChannel(). Когда IFrame загружен, мы передаем MessageChannel.port2 в IFrame с помощью window.postMessage вместе с сообщением. IFrame получает сообщение и отправляет ответное сообщение через MessageChannel с помощью postMessage(). Обработчик handleMessage реагирует на отправку сообщения из IFrame с помощью onmessage, помещая его в абзац — к MessageChannel.port1 прислушиваются, чтобы проверить, когда придет сообщение.

const channel = new MessageChannel();
const para = document.querySelector("p");

const ifr = document.querySelector("iframe");
const otherWindow = ifr.contentWindow;

ifr.addEventListener("load", iframeLoaded, false);

function iframeLoaded() {
  otherWindow.postMessage("Transferring message port", "*", [channel.port2]);
}

channel.port1.onmessage = handleMessage;
function handleMessage(e) {
  para.innerHTML = e.data;
}

// in the iframe…

window.addEventListener("message", (event) => {
  const messagePort = event.ports?.[0];
  messagePort.postMessage("Hello from the iframe!");
});

Полный рабочий пример можно найти в нашем демо базового обмена сообщениями канала на GitHub (запустить его онлайн).

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

Спецификация
HTML
# dom-messageport-postmessage-dev

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
postMessage 2 12 41 10.6 5 18 41 11 4.2 1.0 4.4
options_includeUserActivation_parameter 72 79 Нет 60 Нет 72 Нет 51 Нет 11.0 72

См. также

  • Использование обмена сообщениями канала

© 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/MessagePort/postMessage

Spec-Zone.ru

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