43

我正在使用这个 Web 工作者,它声明了一个全局变量。我可以在新生成的网络工作者(工作者 2)中访问相同的(工作者 1 中的全局变量)吗?

当我尝试在 Web Worker 中使用 jQuery 时,出现错误“未定义窗口”。有什么方法可以在 jQuery 中使用 jQueryWeb Worker吗?

importScripts('jquery-latest.js');

函数 fetch_ajax(url) {
  $.ajax({
    类型:'GET',
    网址:网址,
    成功:功能(响应){
    postMessage(响应);  


    }
  });
}

fetch_ajax('test.txt');
4

2 回答 2

70

Web Workers 没有window对象。

要访问全局状态,请改用self可在主线程和工作线程上工作的代码。

但请注意,您仍然无法访问或操作父级DOM(例如 get window.jQueryvia self.jQuery)。

虽然主线程窗口self指向 Window 对象,但在工作线程中self指向一个单独的WorkerGlobalScope对象。

于 2012-06-28T02:17:36.613 回答
22

基于@buley 提示,我做到了:

var window = self;

importScripts(/* dependencies here */);

/* my code */

就我而言,我试图使用 ES6-Promise 库:https ://github.com/jakearchibald/es6-promise#readme

于 2014-03-04T01:11:24.633 回答