Worker

Worker 接口是 Web Workers API 的一部分,指的是一种可由脚本创建的后台任务,任务执行中可以向其创建者收发信息。要创建一个 Worker,只须调用 Worker(URL) 构造函数,函数参数 URL 为指定的脚本。

Worker 也可以创建新的 Worker,当然,所有 Worker 必须与其创建者同源(注意:Blink暂时不支持嵌套 Worker)。

需要注意的是,不是所有函数和构造函数 (或者说…类) 都可以在 Worker 中使用。具体参考页面 Worker 所支持的函数和类。Worker 可以使用 XMLHttpRequest 发送请求,但是请求的 responseXMLchannel 两个属性值始终返回 nullfetch 仍可正常使用,没有类似的限制)。

备注: 如果你要在火狐浏览器的扩展使用 Worker 访问 js-ctypes,应使用 ChromeWorker 对象来替代。(译者注:这里没有看懂,希望有人能驳正,或添加说明)

构造函数

Worker()

创建一个专用 Web worker,它只执行 URL 指定的脚本。使用 Blob URL 作为参数亦可。

属性

继承父接口 EventTarget 的属性。

事件句柄

AbstractWorker.onerror

ErrorEvent 类型的事件冒泡到 worker 时,事件监听函数 EventListener 被调用。它继承于 AbstractWorker.

Worker.onmessage

MessageEvent类型的事件冒泡到 worker 时,事件监听函数 EventListener 被调用。例如,一个消息通过 DedicatedWorkerGlobalScope.postMessage,从执行者发送到父页面对象,消息保存在事件对象的 data 属性中。

Worker.onmessageerror

messageerror 类型的事件发生时,对应的事件处理器代码被调用。

方法

继承父接口 EventTarget 的方法。

Worker.postMessage()

发送一条消息到最近的外层对象,消息可由任何 JavaScript 对象组成。

Worker.terminate()

立即终止 worker。该方法不会给 worker 留下任何完成操作的机会;就是简单的立即停止。Service Woker 不支持这个方法。

示例

下面的代码通过构造函数 Worker() 创建了一个 Worker 对象。

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

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

完整的示例,请查阅 Basic dedicated worker example (run dedicated worker).

规范

Specification
HTML
# dedicated-workers-and-the-worker-interface

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Worker
Worker() constructor
Support for ECMAScript modules
Strict MIME type checks for worker scripts
options.name parameter
options.type parameter
error event
message event
messageerror event
postMessage
options.includeUserActivation parameter
Non-standard
terminate
Available in workers

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Non-standard. Check cross-browser support before using.
See implementation notes.
Has more compatibility info.

不同类型的 worker 兼容度不一致,详细参考具体定义的页面。

跨域行为的错误事件

浏览器的早期版本中,加载跨域的执行者脚本导致 SecurityError事件。根据规范的变更,而新版本的浏览器只有error事件发生

参见