Worker

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

注意:此功能在 Web Workers 中可用,但 Service Workers 除外。

Worker 接口是 Web Workers API 的一部分,代表一个可以通过脚本创建的后台任务,该任务可以向其创建者发送消息。

通过调用 Worker("path/to/worker/script") 构造函数来创建 worker。

Worker 本身也可以创建新的 Worker,前提是这些新的 Worker 必须与父页面具有相同的 源 (origin)

请注意,并非所有接口和函数都可供 Web Worker 使用。有关详细信息,请参阅 Web Worker 可用的函数和类

EventTarget Worker

构造函数

Worker()

创建一个专用的 Web Worker,用于执行指定 URL 的脚本。此方法也适用于 Blob URL

实例属性

继承其父级 EventTarget 的属性。

实例方法

继承其父级 EventTarget 的方法。

Worker.postMessage()

向 worker 的内部作用域发送一条消息 — 该消息可以包含任何 JavaScript 对象。

Worker.terminate()

立即终止 Worker。这不会让 Worker 完成其操作;它会被立即停止。ServiceWorker 实例不支持此方法。

事件

error

在 Worker 中发生错误时触发。

message

当 Worker 的父级收到来自该 Worker 的消息时触发。

messageerror

Worker 对象收到一条无法 反序列化 的消息时触发。

示例

以下代码片段使用 Worker() 构造函数创建一个 Worker 对象,然后使用该 worker 对象

js
const myWorker = new Worker("/worker.js");
const first = document.querySelector("input#number1");
const second = document.querySelector("input#number2");

first.onchange = () => {
  myWorker.postMessage([first.value, second.value]);
  console.log("Message posted to worker");
};

如需完整示例,请参阅我们的 基本专用 Worker 示例运行专用 Worker)。

规范

规范
HTML
# 专用的 Worker 和 Worker 接口

浏览器兼容性

不同类型的 Worker 支持程度各不相同。具体细节请参阅每个 Worker 类型的页面。

跨域 Worker 的错误行为

在规范的早期版本中,加载跨域 Worker 脚本会抛出 SecurityError。如今,而是抛出一个 error 事件。

另见