Javascript Web worker中的全局变量
我正在使用这个Web worker,其中声明了一个全局变量。我可以在新生成的web worker(worker 2)中访问相同的(worker 1中的全局变量)吗 当我尝试在WebWorker中使用jQuery时,我得到错误“窗口未定义”。有没有办法在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工作者中使用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问题已经得到了回答,所以最好从你的问题中删除这一部分。这个“提示”有点冒险。出于某些不同的目的(共享代码),我正在使用testtypeof窗口!='未定义“
以检查我是否在web worker或主客户端JavaScript中。它不再工作了。@allezl'OM最好检查window.document。