简体   繁体   中英

How Can I use Other Libraries in a Web Worker?

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.

在worker的.js文件中:

importScripts('../relative/path/lib.min.js', '../../other/lib.js');

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:

  1. The navigator object
  2. The location object
  3. XMLHttpRequest
  4. The setTimeout and clearTimeout functions.
  5. The Application Cache
  6. Spawning other Web Workers
  7. Using a webworker specific method to load other scripts

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM