ServiceWorker: phương thức postMessage()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Phương thức postMessage() của giao diện ServiceWorker gửi một thông điệp đến worker. Tham số đầu tiên là dữ liệu cần gửi đến worker. Dữ liệu có thể là bất kỳ đối tượng JavaScript nào có thể được xử lý bởi thuật toán sao chép theo cấu trúc.
Service worker có thể gửi thông tin trở lại các client của nó bằng cách sử dụng phương thức postMessage(). Thông điệp sẽ không được gửi trở lại đối tượng ServiceWorker này mà đến ServiceWorkerContainer được liên kết, khả dụng thông qua navigator.serviceWorker.
Cú pháp
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)
Tham số
message-
Đối tượng cần chuyển đến worker; đối tượng này sẽ nằm trong trường
datacủa sự kiện được chuyển đến sự kiệnmessage. Đây có thể là bất kỳ đối tượng JavaScript nào được xử lý bởi thuật toán sao chép theo cấu trúc.Tham số
messagelà bắt buộc. Nếu dữ liệu cần truyền đến worker không quan trọng, phải truyền rõ ràngnullhoặcundefined.Note: Service worker không nằm trong cùng nhóm agent với client của nó, do đó không thể chia sẻ bộ nhớ. Các đối tượng
SharedArrayBuffer, hoặc các buffer view được hỗ trợ bởi nó, không thể được đăng qua các nhóm agent. Việc cố gắng làm vậy sẽ tạo ra sự kiệnmessageerrorchứaDOMExceptionDataCloneErrorở đầu nhận. transferOptional-
Một mảng các đối tượng có thể chuyển nhượng tùy chọn để chuyển quyền sở hữu. Quyền sở hữu của các đối tượng này được chuyển cho phía đích và chúng không còn khả dụng ở phía gửi. Các đối tượng có thể chuyển nhượng này nên được đính kèm vào thông điệp; nếu không chúng sẽ được di chuyển nhưng thực sự không thể truy cập ở đầu nhận.
optionsOptional-
Một đối tượng tùy chọn chứa các thuộc tính sau:
transferOptional-
Có ý nghĩa giống như tham số
transfer.
Giá trị trả về
Không có (undefined).
Ngoại lệ
SyntaxError-
Được ném ra nếu tham số
messagekhông được cung cấp.
Ví dụ
Trong ví dụ này, một ServiceWorker được tạo và một thông điệp được gửi ngay lập tức:
navigator.serviceWorker.register("service-worker.js");
navigator.serviceWorker.ready.then((registration) => {
registration.active.postMessage(
"Test message sent immediately after creation",
);
});
Để nhận thông điệp, service worker, trong service-worker.js, phải lắng nghe sự kiện message trên phạm vi toàn cục của nó.
// Đoạn này phải nằm trong `service-worker.js`
addEventListener("message", (event) => {
console.log(`Message received: ${event.data}`);
});
Lưu ý rằng service worker có thể gửi thông điệp trở lại luồng chính bằng cách sử dụng phương thức postMessage(). Để nhận nó, luồng chính cần lắng nghe sự kiện message trên đối tượng ServiceWorkerContainer.
Đặc tả kỹ thuật
| Thông số kỹ thuật |
|---|
| Service Workers Nightly> # dom-serviceworker-postmessage> |
| Service Workers Nightly> # dom-serviceworker-postmessage-message-options> |
Tương thích trình duyệt
Xem thêm
- Giao diện
ServiceWorkermà nó thuộc về. - Phương thức đối ứng
postMessage()mà service worker phải sử dụng để gửi thông điệp trở lạiServiceWorkerContainerđược liên kết.