BTW, I think it's valuable to point out in the example that MessageEvent.target == the port that received the message (so we don't need to use a closure as in the example below - just use event.target.postMessage()).<div>
<br></div><div>This is slightly outside the scope of this discussion, but I've heard rumblings about the (w3c?) community collectively developing some sort of unified test suite for HTML5 APIs like SharedWorkers. Is someone driving that effort forward? I say this because I've tried to put together an ad hoc test suite for the WebKit implementation, but I'm sure it's missing a number of obscure cases, so having a canonical suite would be really valuable to ensure compatibility.</div>
<div><br></div><div>-atw<br><br><div class="gmail_quote">On Thu, Feb 25, 2010 at 12:41 AM, Simon Pieters <span dir="ltr"><<a href="mailto:simonp@opera.com">simonp@opera.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On Tue, 23 Feb 2010 21:36:15 +0100, Simon Pieters <<a href="mailto:simonp@opera.com" target="_blank">simonp@opera.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
step 3.<br>
<br>
test.html<br>
<pre id="log">Log:</pre><br>
<script><br>
var worker = new SharedWorker('test.js');<br>
var log = document.getElementById('log');<br>
worker.port.addEventListener('message', function(e) {<br>
   log.textContent += '\n' + e.data;<br>
}, false);<br>
worker.port.start();<br>
worker.port.postMessage('ping');<br>
</script><br>
<iframe src=other.html></iframe><br>
<br>
other.html<br>
<pre id=log>Inner log:</pre><br>
<script><br>
var worker = new SharedWorker('test.js');<br>
var log = document.getElementById('log');<br>
worker.port.onmessage = function(e) {<br>
   log.textContent += '\n' + e.data;<br>
}<br>
</script><br>
<br>
test.js<br>
onconnect = function(e) {<br>
   var port = e.ports[0];<br>
   port.postMessage('hello');<br>
   port.onmessage = function(e) {<br>
     port.postMessage('pong');<br>
   }<br>
}<br>
</blockquote>
<br></div></div>
The worker script could be modified in step 3 as follows to make it clear that the script is in fact shared:<br>
<br>
test.js<br>
var i = 0;<br>
onconnect = function(e) {<br>
  i++;<div class="im"><br>
  var port = e.ports[0];<br></div>
  port.postMessage('hello, ' + i);<div><div></div><div class="h5"><br>
  port.onmessage = function(e) {<br>
    port.postMessage('pong');<br>
  }<br>
}<br>
<br>
-- <br>
Simon Pieters<br>
Opera Software<br>
</div></div></blockquote></div><br></div>