The Worker interface of the Web Workers API represents a background task that can be created via script, which can send messages back to its creator.

Creating a worker is done by calling the Worker("path/to/worker/script") constructor.

Workers may themselves spawn new workers, as long as those workers are hosted at the same origin as the parent page. (Note: nested workers are not yet implemented in WebKit).

Not all interfaces and functions are available to scripts inside a Worker. Workers may use XMLHttpRequest for network communication, but its responseXML and channel attributes are always null. (fetch is also available, with no such restrictions.)

EventTarget Worker



Creates a dedicated web worker that executes the script at the specified URL. This also works for Blob URLs.


Inherits properties from its parent, EventTarget.


Inherits methods from its parent, EventTarget.


Sends a message — consisting of any JavaScript object — to the worker's inner scope.


Immediately terminates the worker. This does not let worker finish its operations; it is halted at once. ServiceWorker instances do not support this method.



Fires when an error occurs in the worker.


Fires when the worker's parent receives a message from that worker.


Fires when a Worker object receives a message that can't be deserialized.


Fires every time a Promise rejects, regardless of whether or not there is a handler to catch the rejection.


Fires when a Promise rejects with no handler to catch the rejection.


The following code snippet creates a Worker object using the Worker() constructor, then uses the worker object:

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');

For a full example, see our Basic dedicated worker example (run dedicated worker).


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

Browser compatibility

BCD tables only load in the browser

Support varies for different types of workers. See each worker type's page for specifics.

Cross-origin worker error behavior

In early versions of the spec, loading a cross-origin worker script threw a SecurityError. Nowadays, an error event is thrown instead.

See also