Skip to content

Instantly share code, notes, and snippets.

@Baptouuuu
Last active August 29, 2015 13:56
Show Gist options
  • Select an option

  • Save Baptouuuu/9255992 to your computer and use it in GitHub Desktop.

Select an option

Save Baptouuuu/9255992 to your computer and use it in GitHub Desktop.
small worker to share data to all tabs that opened the worker
var ports = [];
self.addEventListener('connect', function (event) {
var port = event.source;
ports.push(port);
port.addEventListener('message', function (e) {
for (var i = 0, l = ports.length; i < l; i++) {
if (ports[i] !== port) {
ports[i].postMessage(e.data);
}
}
}.bind(self), false);
port.start();
}.bind(self), false);
self.addEventListener('close', function (event) {
var idx = ports.indexOf(event.source);
ports.slice(idx, idx);
}.bind(self), false);
@Baptouuuu
Copy link
Copy Markdown
Author

to consume this worker:

worker = new SharedWorker('shared-worker.js', 'You can name it');
worker.port.addEventListener('message', function (event) {
  console.log(event.data);
}, false);
worker.port.start();
worker.port.postMessage({
  some: {
    structured: 'data'
  }
});

The object posted will logged in every page the worker is instanciated.

Remember to close the port when you're done; otherwise if you re create the worker (like after reloading the page) it will log multiple times the data.

worker.port.close();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment