Web Worker 中的全局变量

问题描述 投票:0回答:3

我正在使用这个 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');
javascript web-worker
3个回答
81
投票

Web Workers 没有

window
对象。

要访问全局状态,请使用

self
,代码可在主线程和工作线程上运行。

但请注意,您仍然无法访问或操作父级

DOM
(例如通过
window.jQuery
获取
self.jQuery
)。

虽然主线程窗口

self
指向 Window 对象,但在工作线程中
self
指向单独的
WorkerGlobalScope
对象。


23
投票

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

var window = self;

importScripts(/* dependencies here */);

/* my code */

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


0
投票

您应该使用 postmessage 和 onmessage api 来代替 Web Worker 中的全局变量

© www.soinside.com 2019 - 2024. All rights reserved.