ServiceWorkerGlobalScope:messageerror 事件

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中。

注意:此功能仅在Service Workers中可用。

messageerror 事件是 ServiceWorkerGlobalScope 接口的一个事件,当传入的消息无法反序列化时发生。

此事件不可取消,也不冒泡。

语法

在诸如 addEventListener() 的方法中使用事件名称,或设置事件处理程序属性。

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

onmessageerror = (event) => {};

事件类型

事件属性

继承其父级 ExtendableEvent 的属性.

ExtendableMessageEvent.data 只读

返回事件的数据。它可以是任何数据类型。如果在 messageerror 事件中分派,则该属性将为 null

ExtendableMessageEvent.origin 只读

返回发送消息的 Client 的来源。

ExtendableMessageEvent.lastEventId 只读

服务器发送事件中表示事件源的最后一个事件 ID。

ExtendableMessageEvent.source 只读

返回发送消息的 Client 对象的引用。

ExtendableMessageEvent.ports 只读

返回包含表示关联消息通道的端口的 MessagePort 对象的数组。

示例

在下面的示例中,页面通过 ServiceWorkerRegistration.active 获取到 ServiceWorker 对象的句柄,然后调用其 postMessage() 函数。

js
// main.js
if (navigator.serviceWorker) {
  navigator.serviceWorker.register("service-worker.js");

  navigator.serviceWorker.addEventListener("message", (event) => {
    // event is a MessageEvent object
    console.log(`The service worker sent me a message: ${event.data}`);
  });

  navigator.serviceWorker.ready.then((registration) => {
    registration.active.postMessage("Hi service worker");
  });
}

服务工作线程可以通过监听 messageerror 事件来监听消息反序列化错误。

js
// service-worker.js
self.addEventListener("messageerror", (event) => {
  // event is an ExtendableMessageEvent object
  console.error("Message deserialization failed");
});

或者,脚本可以使用 onmessageerror 监听消息反序列化错误。

js
// service-worker.js
self.onmessageerror = (event) => {
  // event is an ExtendableMessageEvent object
  console.error("Message deserialization failed");
};

规范

规范
Service Workers
# eventdef-serviceworkerglobalscope-messageerror
Service Workers
# dom-serviceworkerglobalscope-onmessageerror

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅