Web worker中的全局变量

Nig*_*lan 30 javascript web-worker

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

当我尝试在web worker中使用jQuery时,我收到错误"窗口未定义".有没有办法在jQuery中使用jQuery Web Worker

importScripts('jquery-latest.js');

function fetch_ajax(url) {
  $.ajax({
    type: 'GET', 
    url: url,
    success: function(response) {
    postMessage(response);  


    }
  });
}

fetch_ajax('test.txt');

bul*_*ley 51

Web Workers没有window对象.

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

但请注意,您仍然无法访问或操纵父级DOM(例如,window.jQuery通过self.jQuery).

当主线程窗口self指向Window对象时,在工作线程中self指向单独的WorkerGlobalScope对象.

  • Tnx我几乎经过测试,发现我无法访问worker2中worker1中的变量.并且无法使用jQuery,因为无法访问窗口对象.相反,我使用原生XHR并成功返回响应... (2认同)
  • 这是一个很好的**.与工作人员的沟通是通过消息(`PostMessage`方法和`onmessage`事件).访问DOM或一些共享变量会导致许多令人讨厌的错误...... (2认同)

Fel*_*ipe 15

根据@buley提示,我做到了:

var window = self;

importScripts(/* dependencies here */);

/* my code */
Run Code Online (Sandbox Code Playgroud)

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