// Shared worker will be released once every tab using that worker is closed.
// see: chrome://inspect/#workers
var sharedWorker = new SharedWorker('shared.js', 'shared-worker-example');
+ sharedWorker.onerror = onError;
var sendButton = document.getElementById('sendButton');
sendButton.addEventListener('click', postMessage);
messagePort = sharedWorker.port;
- messagePort.onerror = onError;
messagePort.onmessage = onMessage;
// Starts the sending of messages queued on the port
// (only needed when using EventTarget.addEventListener; it is implied when using MessagePort.onmessage.)
log.insertAdjacentHTML('beforeend', 'Message posted to worker: ' + sendText.value + ' <br>');
}
- function onMessage(e) {
- log.insertAdjacentHTML('beforeend', 'Message received from worker: ' + e.data + ' <br>');
+ function onMessage(event) {
+ log.insertAdjacentHTML('beforeend', 'Message received from worker: ' + event.data + ' <br>');
}
function onError() {
}
function close() {
- // I think, calling close method is not required. Once all tabs are closed, shared worker will be released.
+ // When should I call close method?
messagePort.close();
}
-onconnect = function(e) {
- var port = e.ports[0];
+'use strict';
- port.onmessage = function(e) {
- var workerResult = 'Result: ' + e.data;
+var lastData;
+var messagePorts = [];
+
+onconnect = function(event) {
+ var messagePort = event.ports[0];
+ messagePort.onmessage = function(event) {
+
+ var workerResult;
+ if (lastData) {
+ workerResult = 'Result: ' + event.data + ' Last data: ' + lastData;
+ } else {
+ workerResult = 'Result: ' + event.data;
+ }
+ lastData = event.data;
console.log('SharedWorkerGlobalScope name: ' + name);
console.log('SharedWorkerGlobalScope location: ' + location);
+ console.log('SharedWorkerGlobalScope result: ' + event.data);
- // Data will be sent only to the current active tab.
- port.postMessage(workerResult);
+ messagePorts.forEach(function (messagePort) {
+ messagePort.postMessage(workerResult);
+ });
};
+ messagePorts.push(messagePort);
+
+ // When and where should I call close method?
+ // Should I call messagePort.close() or SharedWorkerGlobalScope.close()?
+ // SharedWorker doesn't have close method but SharedWorkerGlobalScope has one :(
+
+};
+
+onerror = function() {
+ console.log('SharedWorkerGlobalScope: There is an error with the shared worker!');
};