MessagePort: событие messageerror
Базовая версия 2023
Новое
С марта 2023 года эта функция работает на последних устройствах и версиях браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.
Примечание: Эта функция доступна в Web Workers.
Событие messageerror срабатывает на объекте MessagePort, когда он получает сообщение, которое невозможно десериализовать.
Это событие не отменяется и не распространяется.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.
addEventListener("messageerror", (event) => {});
onmessageerror = (event) => {};
Тип события
Объект MessageEvent. Наследуется от Event.
Свойства события
Этот интерфейс также наследует свойства от своего родителя, 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);
};
});
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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