Skip to content

Instantly share code, notes, and snippets.

@sudodoki
Created August 10, 2013 11:43
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sudodoki/6200130 to your computer and use it in GitHub Desktop.
Save sudodoki/6200130 to your computer and use it in GitHub Desktop.
Shared worker demo: proof of concept that different tabs can exchange messages using SharedWorker (so far isn't that spread (caniuse.com/#feat=sharedworkers)[http://caniuse.com/#feat=sharedworkers]
var clients = new Array();
clients.length = 0;
var broadcast = function(clients, message) {
var length = clients.length,
element = null;
for (var i = 0; i < length; i++) {
port = clients[i];
port.postMessage(message);
}
}
self.addEventListener("connect", function (e) {
var port = e.ports[0];
clients.push(port);
port.addEventListener("message", function (e) {
var data = e.data;
broadcast(clients, {"id": e.data.id, "said": e.data.message});
})
port.start();
broadcast(clients, {"id":clients.length, "cmd": "connected"});
}, false);
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>Open your browser's console to see the results.</p>
<form id='dialog-form' action = '#'>
<input id='message' placeholder='enter your chat message' type="text"/>
<input type="submit"/>
</form>
<div id="chat-window">
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
(function() {
var worker = new SharedWorker("./sharedWorker.js");
var id = null;
worker.port.addEventListener("message", function(e) {
console.log('worker id is', id)
if (e.data.cmd === 'connected' && !(id != null)) {
id = e.data.id;
console.log('got id of', id)
} else {
console.log(e.data);
$('#chat-window').append('<div>' + JSON.stringify(e.data) + '</div>');
}
});
worker.port.start();
$('#dialog-form').on('submit', function(e){
e.preventDefault();
var message = $('#message').val();
$('#message').val('');
worker.port.postMessage({message: message, id: id});
});
})();
</script>
</body>
</html>
@sudodoki
Copy link
Author

Seems like we're not allowed images in gists.
Here's the screenshot for demonstrating purposes (2 different tabs screenshots glued together)
https://docs.google.com/file/d/0B65dEGRmB3VicmlPZTZsZURpMWc/edit

@suchov
Copy link

suchov commented Aug 10, 2013

thanks for info,
don't know what to add

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