このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

BroadcastChannel: messageerror イベント

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2022年3月.

メモ: この機能はウェブワーカー内で利用可能です。

messageerrorBroadcastChannel インターフェイスのイベントで、シリアル化の解除ができないメッセージがチャンネルに到着したときに発生します。

構文

このイベント名を addEventListener() のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

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

onmessageerror = (event) => { }

イベント型

MessageEvent です。 Event を継承しています。

Event MessageEvent

イベントプロパティ

このインターフェイスは親である Event からプロパティを継承しています。

MessageEvent.data 読取専用

メッセージ送信元によって送信されたデータです。

MessageEvent.origin 読取専用

文字列で、メッセージ送信元のオリジンを表します。

MessageEvent.lastEventId 読取専用

文字列で、このイベントの一意の ID を表します。

MessageEvent.source 読取専用

メッセージイベントソース、すなわち WindowProxyMessagePortServiceWorker の何れかのオブジェクトで、メッセージの送信元を表します。

MessageEvent.ports 読取専用

MessagePort オブジェクトの配列で、メッセージが送信されるチャンネルに関連するポートを表します(チャンネルメッセージングや、共有ワーカーにメッセージを送信する場合など、適切な場合)。

messageerror イベントの待ち受け

このコードは addEventListener() を使用してメッセージとエラーを待ち受けします。

js
const channel = new BroadcastChannel("example-channel");

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

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

上と同じですが、 onmessageonmessageerror のイベントハンドラープロパティを使用します。

js
const channel = new BroadcastChannel("example-channel");

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

channel.onmessageerror = (event) => {
  console.log(event);
};

共有メモリーを使用した試行

messageerror イベントの一般的な原因は、SharedArrayBuffer オブジェクト、またはそれを裏付けとするバッファビューをエージェントクラスター間で送信しようとすることです。次のコードはその例を示しています。

ページ A では次のコードを実行します。

js
const channel = new BroadcastChannel("hello");
channel.postMessage({ data: new SharedArrayBuffer(1024) });

ページ B では次のコードを実行します。

js
const channel = new BroadcastChannel("hello");
channel.addEventListener("messageerror", (event) => {
  console.error("Message error");
});

その後、ページ B はページ A から送信されたメッセージをシリアル化解除しようとすると、messageerror イベントを受信します。

仕様書

Specification
HTML
# event-messageerror
HTML
# handler-broadcastchannel-onmessageerror

ブラウザーの互換性

関連情報