MessagePort: sự kiện messageerror

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2023.

Note: This feature is available in Web Workers.

Sự kiện messageerror được kích hoạt trên đối tượng MessagePort khi nó nhận được tin nhắn không thể deserialize.

Sự kiện này không thể hủy và không nổi bọt.

Cú pháp

Dùng tên sự kiện trong các phương thức như addEventListener(), hoặc đặt thuộc tính xử lý sự kiện.

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

onmessageerror = (event) => { }

Loại sự kiện

Một MessageEvent. Kế thừa từ Event.

Event MessageEvent

Thuộc tính sự kiện

Giao diện này cũng kế thừa các thuộc tính từ đối tượng cha, Event.

MessageEvent.data Read only

Dữ liệu được gửi bởi nguồn phát tin nhắn.

MessageEvent.origin Read only

Một chuỗi đại diện cho nguồn gốc của nguồn phát tin nhắn.

MessageEvent.lastEventId Read only

Một chuỗi đại diện cho ID duy nhất của sự kiện.

MessageEvent.source Read only

Một MessageEventSource (có thể là đối tượng WindowProxy, MessagePort, hoặc ServiceWorker) đại diện cho nguồn phát tin nhắn.

MessageEvent.ports Read only

Một mảng chứa tất cả các đối tượng MessagePort được gửi cùng tin nhắn, theo thứ tự.

Ví dụ

Cố gắng chia sẻ bộ nhớ

Một nguyên nhân phổ biến của sự kiện messageerror là cố gắng gửi đối tượng SharedArrayBuffer, hoặc buffer view dựa trên một đối tượng như vậy, qua các agent cluster. Ví dụ, một window không cùng agent cluster với shared worker mà nó tạo ra, vì vậy giả sử trang chạy đoạn mã sau:

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

worker.js chứa đoạn mã sau:

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");
  });
});

Thì shared worker sẽ nhận được sự kiện messageerror khi cố gắng deserialize tin nhắn được gửi từ window.

Note: Bạn có thể dùng devtools của trình duyệt để debug SharedWorker bằng cách nhập URL vào thanh địa chỉ trình duyệt để truy cập trình kiểm tra workers của devtools; ví dụ, trong Chrome là URL chrome://inspect/#workers, và trong Firefox là URL about:debugging#workers.

Thông số kỹ thuật

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

Tương thích trình duyệt

Xem thêm