MessagePort: messageerror 事件

Baseline 已廣泛支援

此功能已成熟,並可在許多裝置和瀏覽器版本上執行。自 2023 年 3 月以來,它已在各種瀏覽器中可用。

注意:此功能在 Web Workers 中可用。

messageerror 事件在 MessagePort 物件上觸發時,表示該物件接收到一個無法反序列化的訊息。

此事件不可取消,也不會冒泡。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

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

onmessageerror = (event) => { }

事件型別

一個 MessageEvent。繼承自 Event

Event MessageEvent

事件屬性

此介面還繼承了其父級 Event 的屬性。

MessageEvent.data 只讀

由訊息傳送者傳送的資料。

MessageEvent.origin 只讀

一個字串,表示訊息傳送者的源。

MessageEvent.lastEventId 只讀

一個字串,表示事件的唯一 ID。

MessageEvent.source 只讀

一個 MessageEventSource(可以是 WindowProxyMessagePortServiceWorker 物件),表示訊息傳送者。

MessageEvent.ports 只讀

一個包含與訊息一起傳送的、按順序排列的所有 MessagePort 物件的陣列。

示例

嘗試共享記憶體

messageerror 事件的一個常見原因是在 代理叢集 之間嘗試傳送 SharedArrayBuffer 物件或由其支援的緩衝區檢視。例如,一個視窗與它建立的共享工作執行緒不在同一個代理叢集中,因此假設頁面執行以下程式碼:

js
const worker = new SharedWorker("worker.js");
worker.port.start();
worker.port.addEventListener("message", (event) => {
  worker.port.postMessage(new SharedArrayBuffer(1024));
});

worker.js 包含以下程式碼:

js
self.addEventListener("connect", (event) => {
  console.log("Hello");
  const port = event.ports[0];
  port.start();
  port.postMessage("Port connected");
  port.addEventListener("messageerror", (event) => {
    console.log("Message error");
  });
});

那麼當共享工作執行緒嘗試反序列化從視窗傳送的訊息時,就會收到一個 messageerror 事件。

注意: 您可以使用瀏覽器開發者工具來除錯您的 SharedWorker。透過在瀏覽器位址列中輸入一個 URL 來訪問開發者工具的工作執行緒檢查器;例如,在 Chrome 中,URL 是 chrome://inspect/#workers,在 Firefox 中,URL 是 about:debugging#workers

規範

規範
HTML
# event-messageerror
HTML
# handler-messageport-onmessageerror

瀏覽器相容性

另見