JavaScript Communiquer avec un travailleur Web


Exemple

Puisque les travailleurs s'exécutent dans un thread séparé de celui qui les a créés, la communication doit avoir lieu via postMessage .

Remarque: en raison des différents préfixes d'exportation, certains navigateurs ont webkitPostMessage au lieu de postMessage . Vous devez remplacer postMessage pour vous assurer que les travailleurs "fonctionnent" (sans jeu de mots) dans la plupart des endroits possibles:

worker.postMessage = (worker.webkitPostMessage || worker.postMessage);

Depuis le thread principal (fenêtre parente):

// Create a worker
var webworker = new Worker("./path/to/webworker.js");

// Send information to worker
webworker.postMessage("Sample message");

// Listen for messages from the worker
webworker.addEventListener("message", function(event) {
    // `event.data` contains the value or object sent from the worker
    console.log("Message from worker:", event.data); // ["foo", "bar", "baz"]
});

Du travailleur, dans webworker.js :

// Send information to the main thread (parent window)
self.postMessage(["foo", "bar", "baz"]);

// Listen for messages from the main thread
self.addEventListener("message", function(event) {
    // `event.data` contains the value or object sent from main
    console.log("Message from parent:", event.data); // "Sample message"
});

Vous pouvez également ajouter des écouteurs d'événement en utilisant onmessage :

Depuis le thread principal (fenêtre parente):

webworker.onmessage = function(event) {
    console.log("Message from worker:", event.data); // ["foo", "bar", "baz"]
}

Du travailleur, dans webworker.js :

self.onmessage = function(event) {
    console.log("Message from parent:", event.data); // "Sample message"
}