mozilla
Your Search Results

    SharedWorker

    The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, such as several windows, iframes or even workers. They implement an interface different than dedicated workers and have a different global scope, SharedWorkerGlobalScope.

    Note: If SharedWorker can be accessed from several browsing contexts, all those browsing contexts must share the exact same origin (same protocol, host and port).

    Properties

    Inherits properties from its parent, EventTarget, and implements properties from AbstractWorker.

    AbstractWorker.onerror
    Is an EventListener that is called whenever an ErrorEvent of type error bubbles through the worker.
    SharedWorker.port Read only
    Returns a MessagePort object used to communicate and control the shared worker.

    Constructors

    SharedWorker()
    Creates a shared web worker that executes the script at the specified URL.

    Methods

    Inherits methods from its parent, EventTarget, and implements properties from AbstractWorker.

    Example

    In our Basic shared worker example (run shared worker), we have two HTML pages, each of which uses some JavaScript to perform a simple calculation. The different scripts are using the same worker file to perform the calculation — they can both access it, even if their pages are running inside different windows.

    The following code snippet shows creation of a SharedWorker object using the SharedWorker() constructor. Both scripts contain this:

    var myWorker = new SharedWorker("worker.js");
    

    Both scripts then access the worker through a MessagePort object created using the SharedWorker.port property — the port is started using its start() method:

    myWorker.port.start();

    When the port is started, both scripts post messages to the worker and handle messages sent from it using port.postMessage() and port.onmessage, respectively:

    first.onchange = function() {
        myWorker.port.postMessage([first.value,second.value]);
        console.log('Message posted to worker');
      }
    
      second.onchange = function() {
        myWorker.port.postMessage([first.value,second.value]);
        console.log('Message posted to worker');
      }
    
      myWorker.port.onmessage = function(e) {
        result1.textContent = e.data;
        console.log('Message received from worker');
      }

    Inside the worker we use the SharedWorkerGlobalScope.onconnect handler to connect to the same port discussed above. The ports associated with that worker are accessible in the connect event's ports property — we then use MessagePort start() method to start the port, and the onmessage handler to deal with messages sent from the main threads.

    onconnect = function(e) {
        var port = e.ports[0];
    
        port.onmessage = function(e) {
          var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
          port.postMessage(workerResult);
        }
    
        port.start();
    }

    Specifications

    Specification Status Comment
    WHATWG HTML Living Standard
    The definition of 'SharedWorker' in that specification.
    Living Standard No change from Web Workers.
    Web Workers
    The definition of 'SharedWorker' in that specification.
    Candidate Recommendation Initial definition.

    Browser compatibility

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support 4 29.0 (29.0) Not supported 10.60 5, but unsupported as of 6.1
    Feature Android Chrome for Android Firefox Mobile (Gecko) Firefox OS (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support Not supported Not supported 33.0 (33.0) 2.1 Not supported 11.5 5.1, but unsupported as of 7.1

    See also

    Document Tags and Contributors

    Last updated by: KamBha,