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.)
In Firefox extensions, if you want to use workers with access to js-ctypes, use ChromeWorker object instead.
Constructors
Worker()- Creates a dedicated web worker that executes the script at the specified URL. This also works for Blob URLs.
Properties
Inherits properties from its parent, EventTarget, and implements properties from AbstractWorker.
Event handlers
AbstractWorker.onerror- An
EventListenercalled whenever anErrorEventof typeerrorbubbles through to the worker. This is inherited fromAbstractWorker. Worker.onmessage- An
EventListenercalled whenever aMessageEventof typemessagebubbles through the worker — i.e. when a message is sent to the parent document from the worker viaDedicatedWorkerGlobalScope.postMessage. The message is stored in the event'sdataproperty. Worker.onmessageerror- Is an
EventHandlerrepresenting the code to be called when themessageerrorevent is raised.
Methods
Inherits methods from its parent, EventTarget, and implements methods from AbstractWorker.
Worker.postMessage()- Sends a message — consisting of any JavaScript object — to the worker's inner scope.
Worker.terminate()- Immediately terminates the worker. This does not let worker finish its operations; it is halted at once.
ServiceWorkerinstances do not support this method.
Events
message- Fires when the worker's parent receives a message from that worker.
Also available via theonmessageproperty. messageerror- Fires when a
Workerobject receives a message that can't be deserialized.
Also available via theonmessageerrorproperty.
rejectionhandled- Fires every time a
Promiserejects, regardless of whether or not there is a handler to catch the rejection.
Also available through theonrejectionhandledevent handler property. unhandledrejection- Fires when a
Promiserejects with no handler to catch the rejection.
Also available using theonunhandledrejectionevent handler property.
Example
The following code snippet creates a Worker object using the Worker() constructor, then uses the worker object:
var myWorker = new Worker('/worker.js');
var first = document.querySelector('input#number1');
var second = document.querySelector('input#number2');
first.onchange = function() {
myWorker.postMessage([first.value, second.value]);
console.log('Message posted to worker');
}
For a full example, see ourBasic dedicated worker example (run dedicated worker).
Specifications
| Specification | Status | Comment |
|---|---|---|
| HTML Living Standard The definition of 'Worker' in that specification. |
Living Standard |
Browser compatibility
Support varies for different types of workers. See each worker type's page for specifics.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Worker | Chrome Full support 4 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 10 | Opera Full support 10.6 | Safari Full support 4 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 5.1 | Samsung Internet Android Full support 1.0 |
Worker() constructor | Chrome Full support 4 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 10 | Opera Full support 10.6 | Safari Full support 4 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 5.1 | Samsung Internet Android Full support 1.0 |
message event | Chrome Full support 4 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 10 | Opera Full support 10.6 | Safari Full support 4 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11.5 | Safari iOS Full support 5.1 | Samsung Internet Android Full support 1.0 |
messageerror event | Chrome Full support 60 | Edge Full support 18 | Firefox Full support 57 | IE ? | Opera Full support 47 | Safari ? | WebView Android Full support 60 | Chrome Android Full support 60 | Firefox Android Full support 57 | Opera Android Full support 47 | Safari iOS ? | Samsung Internet Android Full support 8.0 |
onmessage | Chrome Full support 4 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 10 | Opera Full support 10.6 | Safari Full support 4 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 5.1 | Samsung Internet Android Full support 1.0 |
onmessageerror | Chrome Full support 60 | Edge Full support 18 | Firefox Full support 57 | IE ? | Opera Full support 47 | Safari ? | WebView Android Full support 60 | Chrome Android Full support 60 | Firefox Android Full support 57 | Opera Android Full support 44 | Safari iOS ? | Samsung Internet Android Full support 8.0 |
postMessage | Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | IE
Full support
10
| Opera Full support 47 | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox Android Full support Yes | Opera Android Full support 44 | Safari iOS Full support Yes | Samsung Internet Android Full support Yes |
terminate | Chrome Full support 4 | Edge Full support 12 | Firefox Full support 3.5 | IE Full support 10 | Opera Full support 10.6 | Safari Full support 4 | WebView Android Full support 4 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 11 | Safari iOS Full support 5.1 | Samsung Internet Android Full support 1.0 |
Legend
- Full support
- Full support
- Compatibility unknown
- Compatibility unknown
- See implementation notes.
- See implementation notes.
Cross-origin worker error behaviour
In early versions of the spec, loading a cross-origin worker script threw a SecurityError. Nowadays, an error event is thrown instead. Find out how to deal with this in Loading cross-origin worker now fires error event instead of throwing; worker in sandboxed iframe no longer allowed.
See also
- Using web workers
- Functions available to workers
- Other kind of workers:
SharedWorkerand ServiceWorker. - Non-standard, Gecko-specific workers, used by extensions:
ChromeWorker.
