Javascript Web worker中的全局变量

Javascript Web worker中的全局变量,javascript,web-worker,Javascript,Web Worker,我正在使用这个Web worker,其中声明了一个全局变量。我可以在新生成的web worker(worker 2)中访问相同的(worker 1中的全局变量)吗 当我尝试在WebWorker中使用jQuery时,我得到错误“窗口未定义”。有没有办法在Web工作者中使用jQuery importScripts('jquery-latest.js'); function fetch_ajax(url) { $.ajax({ type: 'GET', url: url,

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

当我尝试在WebWorker中使用jQuery时,我得到错误“窗口未定义”。有没有办法在
Web工作者中使用jQuery

importScripts('jquery-latest.js'); function fetch_ajax(url) { $.ajax({ type: 'GET', url: url, success: function(response) { postMessage(response); } }); } fetch_ajax('test.txt'); importScripts('jquery-latest.js'); 函数fetch_ajax(url){ $.ajax({ 键入:“GET”, url:url, 成功:功能(响应){ 后消息(响应); } }); } fetch_ajax('test.txt');
Web工作人员没有
窗口
对象

要访问全局状态,请改为使用将在主线程和工作线程上工作的代码

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


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

基于@buley tip,我做到了:

var window = self;

importScripts(/* dependencies here */);

/* my code */

在我的例子中,我尝试使用ES6 Promise lib:

Tnx,我实际测试了它,发现我无法访问worker2中worker1中的变量。并且无法使用jQuery,因为无法访问窗口对象。相反,我使用了原生XHR并成功地返回了响应……这是一件好事。通过消息(
PostMessage
方法和
onmessage
事件)与工人进行沟通。访问DOM或某些共享变量会导致许多严重错误……我的理解是,每个web worker和主线程(web页面)中的全局范围都是独立的,但在每种情况下,它们都可以通过
self
对象访问。在主线程中,
self
window
的同义词。这也是你的理解,还是你的意思是其他的?@MichaelScheper全局对象的
self
属性基本上返回
这个
(可能不是字面上的,而是概念上的)。因此,
window.self
返回
window
,而
self
在Web Worker中返回Worker的全局对象(无论称为什么)。您似乎在这里问了两个问题。问题应分开处理。我很确定jQuery问题已经得到了回答,所以最好从你的问题中删除这一部分。这个“提示”有点冒险。出于某些不同的目的(共享代码),我正在使用test
typeof窗口!='未定义“
以检查我是否在web worker或主客户端JavaScript中。它不再工作了。@allezl'OM最好检查window.document。