BroadcastChannel: 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 2022.

Note: This feature is available in Web Workers.

Sự kiện messageerror của giao diện BroadcastChannel được kích hoạt khi một thông điệp không thể giải tuần tự đến trên kênh.

Cú pháp

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

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

onmessageerror = (event) => { }

Kiểu sự kiện

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

Event MessageEvent

Thuộc tính sự kiện

Ngoài các thuộc tính được liệt kê bên dưới, còn có các thuộc tính từ giao diện cha Event.

data Read only

Dữ liệu được bộ phát thông điệp gửi đi.

origin Read only

Một chuỗi biểu diễn nguồn gốc của bộ phát thông điệp.

lastEventId Read only

Một chuỗi biểu diễn mã nhận dạng duy nhất của sự kiện.

source Read only

Một nguồn sự kiện thông điệp, là một đối tượng WindowProxy, MessagePort hoặc ServiceWorker biểu diễn bộ phát thông điệp.

ports Read only

Một mảng các đối tượng MessagePort biểu diễn các cổng gắn với kênh mà thông điệp đang được gửi qua (khi phù hợp, ví dụ trong channel messaging hoặc khi gửi thông điệp tới shared worker).

Ví dụ

Lắng nghe sự kiện messageerror

Đoạn mã này dùng addEventListener() để lắng nghe thông điệp và lỗi:

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

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

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

Đoạn mã sau có cùng chức năng nhưng dùng các thuộc tính xử lý sự kiện onmessageonmessageerror:

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

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

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

Thử chia sẻ bộ nhớ

Một nguyên nhân phổ biến gây ra sự kiện messageerror là cố gắng gửi một đối tượng SharedArrayBuffer, hoặc một khung nhìn bộ đệm được hậu thuẫn bởi đối tượng đó, qua các cụm agent. Đoạn mã sau minh họa điều này.

Trang A chạy đoạn mã sau:

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

Trang B chạy đoạn mã sau:

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

Khi đó trang B sẽ nhận được một sự kiện messageerror khi cố gắng giải tuần tự thông điệp được gửi từ trang A.

Thông số kỹ thuật

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

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

Xem thêm