Reputation: 13491
I have some javascript code like this,
var worker = new Worker("javascript/worker.js");
worker.onmessage = function(evt)
{
// stuff
}
worker.js looks like this,
importScripts("base.js");
function getImage()
{
$.ajax({
url: 'URL'
dataType: "text/plain; charset=x-user-defined",
mimeType: "text/plain; charset=x-user-defined",
success: function(data, textStatus, jqXHR)
{
callback();
}
});
}
The worker.js file does not have jQuery included so that doesn't work. If I add this to worker.js,
importScripts("jQuery.js");
Then I get the message,
Uncaught ReferenceError: window is not defined
I'm not really familiar with workers. Am I right in thinking this it is loading the worker.js code in a completely separate environment (basically a background thread) so it doesn't have access to window.
Upvotes: 7
Views: 12793
Reputation: 206
On the worker's .js file:
importScripts('../relative/path/lib.min.js', '../../other/lib.js');
Upvotes: 14
Reputation: 740
In order to prevent web workers from running into concurrency problems, the web worker spec prevents the worker from having access to the window object or the DOM.
The only objects and methods available inside a worker are:
So whilst you could use the worker to create the XMLHttpRequest manually; Jquery or any other library which expects to be able to access the DOM or Window Object is never going to work in there.
Upvotes: 4
Reputation: 13491
Yeah it has been correctly pointed out to me that the ajax call is asynchronous so the worker is not required. For circumstances which I won't explain turns out that the ajax call didn't work anyway, so I reverted back to the XMLHttpRequest how it was and left it using a worker.
Upvotes: -1