Worker: Worker() 构造函数

Baseline 广泛可用 *

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

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

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

Worker() 构造函数创建一个 Worker 对象,该对象执行指定 URL 的脚本。该脚本必须遵守 同源策略

注意: 浏览器厂商之间对于 data URL 是否属于同源存在分歧。虽然 Firefox 10 及更高版本接受 data URL,但并非所有其他浏览器都这样做。

语法

js
new Worker(url)
new Worker(url, options)

参数

url

一个字符串,表示 worker 将执行的脚本的 URL。它必须遵守同源策略。URL 相对于当前 HTML 页面的位置进行解析。

注意: 包括 webpackViteParcel 在内的打包工具建议将相对于 import.meta.url 的 URL 传递给 Worker() 构造函数。例如:

js
const myWorker = new Worker(new URL("worker.js", import.meta.url));

这样,路径就相对于当前脚本而不是当前 HTML 页面,这允许打包工具安全地执行重命名等优化(因为否则 worker.js URL 可能指向一个不受打包工具控制的文件,因此它无法做出任何假设)。

options 可选

一个对象,包含创建对象实例时可设置的选项属性。可用属性如下:

type

一个字符串,指定要创建的 worker 的类型。该值可以是 classicmodule。如果未指定,则默认为 classic

credentials

一个字符串,指定 worker 使用的凭证类型。该值可以是 omitsame-origininclude。如果未指定,或者 type 是 classic,则默认为 same-origin(仅包含同源请求的凭证)。

name

一个字符串,指定代表 worker 作用域的 DedicatedWorkerGlobalScope 的标识名称,这对于调试目的非常有用。

异常

SecurityError DOMException

如果文档不允许启动 worker,则会抛出此错误,例如,如果 URL 语法无效或违反了同源策略。

NetworkError DOMException

如果 worker 脚本的 MIME 类型不正确,则会抛出此错误。它应该始终为 text/javascript(出于历史原因,其他 JavaScript MIME 类型也可能被接受)。

SyntaxError DOMException

如果 aURL 无法解析,则会抛出此错误。

示例

以下代码段展示了使用 Worker() 构造函数创建 Worker 对象及其后续用法:

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

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

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

规范

规范
HTML
# dom-worker-dev

浏览器兼容性

另见

它所属的 Worker 接口。