我正在使用这个 Web Worker,其中声明了一个全局变量。我可以在新生成的 Web Worker(Worker 2)中访问相同的(Worker 1 中的全局变量)吗?
当我尝试在 Web Worker 中使用 jQuery 时,出现错误“窗口未定义”。有没有办法在
Web Worker
中使用 jQuery?
importScripts('jquery-latest.js');
function fetch_ajax(url) {
$.ajax({
type: 'GET',
url: url,
success: function(response) {
postMessage(response);
}
});
}
fetch_ajax('test.txt');
Web Workers 没有
window
对象。
要访问全局状态,请使用
self
,代码可在主线程和工作线程上运行。
但请注意,您仍然无法访问或操作父级
DOM
(例如通过 window.jQuery
获取 self.jQuery
)。
虽然主线程窗口
self
指向 Window 对象,但在工作线程中 self
指向单独的 WorkerGlobalScope
对象。
根据@buley提示,我做到了:
var window = self;
importScripts(/* dependencies here */);
/* my code */
就我而言,我尝试使用 ES6-Promise 库:https://github.com/jakearchibald/es6-promise#readme
您应该使用 postmessage 和 onmessage api 来代替 Web Worker 中的全局变量