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.
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
Loại sự kiện
Một MessageEvent. Kế thừa từ Event.
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.dataRead only-
Dữ liệu được gửi bởi nguồn phát tin nhắn.
MessageEvent.originRead only-
Một chuỗi đại diện cho nguồn gốc của nguồn phát tin nhắn.
MessageEvent.lastEventIdRead only-
Một chuỗi đại diện cho ID duy nhất của sự kiện.
MessageEvent.sourceRead only-
Một
MessageEventSource(có thể là đối tượng WindowProxy,MessagePort, hoặcServiceWorker) đại diện cho nguồn phát tin nhắn. MessageEvent.portsRead 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:
const worker = new SharedWorker("worker.js");
worker.port.start();
worker.port.addEventListener("message", (event) => {
worker.port.postMessage(new SharedArrayBuffer(1024));
});
Và worker.js chứa đoạn mã sau:
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
| Thông số kỹ thuật |
|---|
| HTML> # event-messageerror> |
| HTML> # handler-messageport-onmessageerror> |
Tương thích trình duyệt
Xem thêm
- Sự kiện liên quan:
message. - Sử dụng channel messaging