Spec-Zone.ru › Web APIs

MessagePort: событие messageerror

Базовая версия 2023
Новое

С марта 2023 года эта функция работает на последних устройствах и версиях браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.

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

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

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

Это событие не отменяется и не распространяется.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.

addEventListener("messageerror", (event) => {});

onmessageerror = (event) => {};

Тип события

Объект MessageEvent. Наследуется от Event.

Событие MessageEvent

Свойства события

Этот интерфейс также наследует свойства от своего родителя, Event.

MessageEvent.data Только для чтения

Данные, отправленные отправителем сообщения.

MessageEvent.origin Только для чтения

Строка, представляющая происхождение отправителя сообщения.

MessageEvent.lastEventId Только для чтения

Строка, представляющая уникальный идентификатор события.

MessageEvent.source Только для чтения

Объект MessageEventSource (который может быть WindowProxy, MessagePort или ServiceWorker), представляющий отправителя сообщения.

MessageEvent.ports Только для чтения

Массив, содержащий все объекты MessagePort, отправленные с сообщением, в порядке.

Примеры

Предположим, сценарий создает MessageChannel и отправляет один из портов в другой контекст просмотра, например, в другой <iframe>, используя такой код:

const channel = new MessageChannel();
const myPort = channel.port1;
const targetFrame = window.top.frames[1];
const targetOrigin = "https://example.org";

const messageControl = document.querySelector("#message");
const channelMessageButton = document.querySelector("#channel-message");

channelMessageButton.addEventListener("click", () => {
  myPort.postMessage(messageControl.value);
});

targetFrame.postMessage("init", targetOrigin, [channel.port2]);

Целевой объект может принять порт и начать прослушивать сообщения и ошибки сообщений на нем, используя такой код:

window.addEventListener("message", (event) => {
  const myPort = event.ports[0];

  myPort.addEventListener("message", (event) => {
    received.textContent = event.data;
  });

  myPort.addEventListener("messageerror", (event) => {
    console.error(event.data);
  });

  myPort.start();
});

Обратите внимание, что слушатель должен вызвать MessagePort.start() прежде чем сообщения будут доставлены в этот порт. Это необходимо только при использовании метода addEventListener(): если получатель использует onmessage вместо этого, start() вызывается неявно:

window.addEventListener("message", (event) => {
  const myPort = event.ports[0];

  myPort.onmessage = (event) => {
    received.textContent = event.data;
  };

  myPort.onmessageerror = (event) => {
    console.error(event.data);
  };
});

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

Спецификация
HTML
# event-messageerror
HTML
# handler-messageport-onmessageerror

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
messageerror_event 60 18 57 47 16.4 60 57 47 16.4 8.0 60

См. также

  • Связанные события: message.
  • Использование канальной передачи сообщений

© 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/messageerror_event

Spec-Zone.ru

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