Spec-Zone.ru › Web APIs

MessagePort

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

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

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Узнать больше
  • Показать полную совместимость
  • Отправить отзыв

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

Интерфейс MessagePort из API канальной связи представляет собой один из двух портов MessageChannel, позволяющий отправлять сообщения с одного порта и получать их на другом.

MessagePort — это передаваемый объект.

EventTarget MessagePort

Методы экземпляра

Наследует методы от родительского класса, EventTarget.

postMessage()

Отправляет сообщение с порта и, необязательно, передает владение объектами другим контекстам просмотра.

start()

Запускает отправку сообщений, помещенных в очередь на порту (необходимо только при использовании EventTarget.addEventListener; подразумевается при использовании onmessage).

close()

Отключает порт, поэтому он больше не активен.

События

Наследует события от родительского класса, EventTarget.

message

Срабатывает, когда объект MessagePort получает сообщение.

messageerror

Срабатывает, когда объект MessagePort получает сообщение, которое нельзя десериализовать.

Пример

В приведенном ниже примере показано создание нового канала с использованием конструктора MessageChannel().

После загрузки IFrame мы регистрируем обработчик onmessage для MessageChannel.port1 и передаем MessageChannel.port2 в IFrame с помощью метода window.postMessage вместе с сообщением.

Когда сообщение возвращается из IFrame, функция onMessage выводит сообщение в абзац.

const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");

// Wait for the iframe to load
iframe.addEventListener("load", onLoad);

function onLoad() {
  // Listen for messages on port1
  channel.port1.onmessage = onMessage;

  // Transfer port2 to the iframe
  iframe.contentWindow.postMessage("Hello from the main page!", "*", [
    channel.port2,
  ]);
}

// Handle messages received on port1
function onMessage(e) {
  output.innerHTML = e.data;
}

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

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

Спецификация
HTML
# message-ports

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

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
MessagePort 2 12 41 10.6 5 18 41 11 4.2 1.0 4.4
close 2 12 41 10.6 5 18 41 11 4.2 1.0 4.4
message_event 2 12 41 10.6 5 18 41 11.5 4.2 1.0 ≤37
messageerror_event 60 18 57 47 16.4 60 57 47 16.4 8.0 60
postMessage 2 12 41 10.6 5 18 41 11 4.2 1.0 4.4
start 2 12 41 10.6 5 18 41 11 4.2 1.0 4.4
worker_support 4 12 41 ≤15 5 18 41 ≤14 4.2 1.0 ≤37

См. также

  • Использование канальной связи

© 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

Spec-Zone.ru

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