MessagePort: messageerror 事件
注意:此功能在 Web Workers 中可用。
當 messageerror 事件在 MessagePort 物件上觸發時,表示該物件接收到一個無法反序列化的訊息。
此事件不可取消,也不會冒泡。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
js
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
事件型別
一個 MessageEvent。繼承自 Event。
事件屬性
此介面還繼承了其父級 Event 的屬性。
MessageEvent.data只讀-
由訊息傳送者傳送的資料。
MessageEvent.origin只讀-
一個字串,表示訊息傳送者的源。
MessageEvent.lastEventId只讀-
一個字串,表示事件的唯一 ID。
MessageEvent.source只讀-
一個
MessageEventSource(可以是 WindowProxy、MessagePort或ServiceWorker物件),表示訊息傳送者。 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 |
瀏覽器相容性
載入中…