<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Cross-Platform Javascript WebWorker</title>
	<atom:link href="http://codecube.net/2009/07/cross-platform-javascript-webworker/feed/" rel="self" type="application/rss+xml" />
	<link>http://codecube.net/2009/07/cross-platform-javascript-webworker/</link>
	<description>Joel Martinez' weblog</description>
	<lastBuildDate>Fri, 03 Feb 2012 04:11:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: James</title>
		<link>http://codecube.net/2009/07/cross-platform-javascript-webworker/comment-page-1/#comment-1170</link>
		<dc:creator>James</dc:creator>
		<pubDate>Fri, 03 Sep 2010 20:47:44 +0000</pubDate>
		<guid isPermaLink="false">http://codecube.net/2009/07/cross-platform-webworker/#comment-1170</guid>
		<description>Hey, I know this is an old post, but it made a great start toward what I was looking for. I expanded on your solution a bit to support communication both ways and wanted to post it back here for others to use and comment on.

function FakeWorker(path) {
    function InternalWorker() {
        var __w = this;
        var messageq = [];
        __w.postMessage = function(m){messageq.push(m);};
        this.__bindBody = function(data){
            var __win = { postMessage : function(m){
                    if(__w.onmessage){
                         setTimeout(function(){ __w.onmessage({data: m});}, 1);
                    }
                }
            };
            with(__win){
                eval(data);
                __w.postMessage = (onmessage)
                            ? function(m) { setTimeout(function() {onmessage({data: m+&quot; (via FakeWorker)&quot;});}, 1); }
                            : function(){};
                for(var i=0,msg;msg=messageq[i];i++){
                    __w.postMessage(msg);
                }
            }
        }
    }

    var iworker = new InternalWorker();
    $.get(path, function(data) {
                iworker.__bindBody(data);
        }); 
    return iworker;
}

I didn&#039;t want to define the &quot;Worker&quot; class, just because that felt a little misleading to me. Instead, this is how I use it:

var w = (typeof(Worker)===&#039;undefined&#039;)
            ? new FakeWorker(&quot;Worker.js&quot;) 
            : new Worker(&quot;Worker.js&quot;);</description>
		<content:encoded><![CDATA[<p>Hey, I know this is an old post, but it made a great start toward what I was looking for. I expanded on your solution a bit to support communication both ways and wanted to post it back here for others to use and comment on.</p>
<p>function FakeWorker(path) {<br />
    function InternalWorker() {<br />
        var __w = this;<br />
        var messageq = [];<br />
        __w.postMessage = function(m){messageq.push(m);};<br />
        this.__bindBody = function(data){<br />
            var __win = { postMessage : function(m){<br />
                    if(__w.onmessage){<br />
                         setTimeout(function(){ __w.onmessage({data: m});}, 1);<br />
                    }<br />
                }<br />
            };<br />
            with(__win){<br />
                eval(data);<br />
                __w.postMessage = (onmessage)<br />
                            ? function(m) { setTimeout(function() {onmessage({data: m+&#8221; (via FakeWorker)&#8221;});}, 1); }<br />
                            : function(){};<br />
                for(var i=0,msg;msg=messageq[i];i++){<br />
                    __w.postMessage(msg);<br />
                }<br />
            }<br />
        }<br />
    }</p>
<p>    var iworker = new InternalWorker();<br />
    $.get(path, function(data) {<br />
                iworker.__bindBody(data);<br />
        });<br />
    return iworker;<br />
}</p>
<p>I didn&#8217;t want to define the &#8220;Worker&#8221; class, just because that felt a little misleading to me. Instead, this is how I use it:</p>
<p>var w = (typeof(Worker)===&#8217;undefined&#8217;)<br />
            ? new FakeWorker(&#8220;Worker.js&#8221;)<br />
            : new Worker(&#8220;Worker.js&#8221;);</p>
]]></content:encoded>
	</item>
</channel>
</rss>

