- From: Jonas Sicking <jonas@sicking.cc>
- Date: Wed, 23 Sep 2009 14:40:41 -0700
On Wed, Sep 23, 2009 at 3:34 AM, Simon Pieters <simonp at opera.com> wrote: > I'd like a way to use workers without having to use an external resource. > This would allow easier testing, mashups, small standalone apps, and so > forth. > > Possible ways to do it: > > * Support data: URLs in the constructor. A bit annoying to work with, > though. > ? ? new Worker('data:...'); > ? ? new SharedWorker('data:...', 'foo'); > * Point to an element within the same document with a fragment identifier. > ? ? <script type=text/x-worker id=worker>...</script> > ? ? new Worker('#worker'); > ? ? new SharedWorker('#worker', 'foo'); > * Pass a string to the constructor with an additional parameter saying that > it's a string of script rather than a URL. > ? ? new Worker('...', true); > ? ? new SharedWorker('...', 'foo', true); > * Mint new constructors that you pass a string to instead of a URL. > ? ? new WorkerXYZ('...'); > ? ? new SharedWorkerXYZ('...', 'foo'); > * ...other? > > > Currently it seems it is possible to work around the external resource > limitation by doing: > > ? ?<!-- > ? ?postMessage('works!'); > ? ?/* > ? ?--> > ? ?<!doctype html> > ? ?<script> > ? ?// The empty string should work too, per spec, AFAICT, but > ? ?// Firefox and Chrome throw an exception for the empty string > ? ?var worker = new Worker('?'); > ? ?worker.onmessage = function(e) { alert(e.data) } > ? ?</script> > ? ?<!-- > ? ?*/ > ? ?//--> > > ...but this is a bit too hacky for my taste. You can also work around it by doing something like this: test.html: <!DOCTYPE html> <html> <head><title>example</title> <script> str = "<script to evaluate>"; w = new Worker("externalStub.js"); w.postMessage(str); </script> </html> externalStub.js: onmessage = function(e) { eval(e.data); } What's the use case? I think making data: urls is an ok solution, unless the usecases are compelling enough that we think it's something that people will do a lot. / Jonas
Received on Wednesday, 23 September 2009 14:40:41 UTC