我有一些像这样的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代码,因此它无法访问窗口。
答案 0 :(得分:11)
在worker的.js文件中:
importScripts('../relative/path/lib.min.js', '../../other/lib.js');
答案 1 :(得分:3)
为了防止Web worker遇到并发问题,Web worker规范阻止了worker访问window对象或DOM。
工作者中唯一可用的对象和方法是:
因此,您可以使用worker手动创建XMLHttpRequest;期望能够访问DOM或Window对象的Jquery或任何其他库永远不会在那里工作。
答案 2 :(得分:0)
是的,我已正确地指出ajax调用是异步的,因此不需要worker。对于我不会解释的情况,结果是ajax调用无论如何都没有用,所以我回到了XMLHttpRequest它是怎么回事并让它留给了一个工人。