如何在Web Worker中使用其他库?

时间:2012-02-09 02:39:56

标签: javascript web-worker

我有一些像这样的javascript代码,

var worker = new Worker("javascript/worker.js");

worker.onmessage = function(evt)
{
    // stuff
}

worker.js看起来像这样,

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();
    }
});
}

worker.js文件没有包含jQuery,因此不起作用。如果我将此添加到worker.js,

importScripts("jQuery.js");

然后我收到消息,

Uncaught ReferenceError: window is not defined

我对工人并不熟悉。我是否正确地认为它是在一个完全独立的环境(基本上是后台线程)中加载worker.js代码,因此它无法访问窗口。

3 个答案:

答案 0 :(得分:11)

在worker的.js文件中:

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

答案 1 :(得分:3)

为了防止Web worker遇到并发问题,Web worker规范阻止了worker访问window对象或DOM。

工作者中唯一可用的对象和方法是:

  1. 导航器对象
  2. 位置对象
  3. 的XMLHttpRequest
  4. setTimeout和clearTimeout函数。
  5. 应用程序缓存
  6. 产生其他网络工作者
  7. 使用特定于webworker的方法加载其他脚本
  8. 因此,您可以使用worker手动创建XMLHttpRequest;期望能够访问DOM或Window对象的Jquery或任何其他库永远不会在那里工作。

答案 2 :(得分:0)

是的,我已正确地指出ajax调用是异步的,因此不需要worker。对于我不会解释的情况,结果是ajax调用无论如何都没有用,所以我回到了XMLHttpRequest它是怎么回事并让它留给了一个工人。