2012-06-27 47 views
20

我正在使用此Web工作人員,其中聲明瞭一個全局變量。我可以在新產生的web worker(worker 2)中訪問相同的(worker 1中的全局變量)嗎?Web工作人員中的全局變量

當我嘗試在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'); 
+0

你似乎已經在這裏問了兩個問題。 StackOverflow問題應該保持分開。我很確定jQuery的問題已經得到解答,所以最好的做法是從你的問題中刪除這個部分。 –

回答

31

的Web工人沒有一個window對象。

要訪問全局狀態,請使用self代替主線程和輔助線程都可以使用的代碼。

但請注意,您仍然無法訪問或操作父母DOM(例如,通過self.jQuery獲取window.jQuery)。

雖然主線程窗口self指向Window對象,但在工作線程中self指向單獨的WorkerGlobalScope對象。

+2

Tnx我實際測試過,發現我無法訪問worker2中worker1中的變量。也無法使用jQuery,因爲沒有窗口對象的訪問權限。相反,我使用本機XHR併成功返回響應... – Nigilan

+2

這是一個**好的事情。與工作人員的溝通是通過消息('PostMessage'方法和'onmessage'事件)。訪問DOM或某些共享變量會導致很多令人討厭的錯誤... – user1068352

+0

我的理解是,每個web worker和主線程(web頁面)中的全局範圍都是獨立的,但是在每種情況下,它們可以通過'self'對象訪問。在主線程中,'self'是'window'的同義詞。這是你的理解嗎,還是你的意思是別的? –