DedicatedWorkerGlobalScope: postMessage() 方法

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

postMessage() 方法是 DedicatedWorkerGlobalScope 接口的方法,用于向生成它的主线程发送消息。

它接受一个数据参数,该参数包含从工作线程复制到主线程的数据。数据可以是任何值或 JavaScript 对象,这些对象由 结构化克隆 算法处理,包括循环引用。

此方法还接受一个可选的 可传输对象 数组,以传输到主线程;与数据参数不同,传输的对象不再可在工作线程中使用。(在可能的情况下,对象将使用高性能零拷贝操作进行传输)。

生成工作线程的主范围可以使用 Worker.postMessage 方法向生成它的线程发送回信息。

语法

js
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

参数

message

要传递给主线程的对象;这将在传递给 message 事件的事件中的 data 字段中。这可以是任何值或 JavaScript 对象,这些对象由 结构化克隆 算法处理,包括循环引用。

transfer 可选

一个可选的 数组,其中包含要转移所有权的 可传输对象。这些对象的拥有权将交给目标端,它们在发送端不再可用。这些可传输对象应附加到消息;否则,它们将被移动但实际上无法在接收端访问。

options 可选

一个包含以下属性的可选对象

transfer 可选

transfer 参数的含义相同。

返回值

无(undefined)。

示例

以下代码片段显示了 worker.js,其中使用 onmessage 处理程序来处理来自主脚本的消息。在处理程序中,将执行一个计算,并由此创建结果消息;然后使用 postMessage(workerResult); 将此消息发送回主线程。

js
onmessage = (e) => {
  console.log("Message received from main script");
  const workerResult = `Result: ${e.data[0] * e.data[1]}`;
  console.log("Posting message back to main script");
  postMessage(workerResult);
};

在主脚本中,必须在 Worker 对象 上调用 onmessage,而在工作线程脚本中,您只需要 onmessage,因为工作线程实际上是全局范围(DedicatedWorkerGlobalScope)。

有关完整示例,请参阅我们的 基本专用工作线程示例 (运行专用工作线程)。

注意:postMessage() 每次只能发送一个对象。如上所示,如果要传递多个值,则可以发送数组。

规范

规范
HTML 标准
# dom-dedicatedworkerglobalscope-postmessage-dev

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参见

它所属的 DedicatedWorkerGlobalScope 接口。