2012-06-27 38 views
20

Sto usando questo web worker che ha una variabile Global dichiarata in esso. Posso accedere alla stessa (variabile globale in worker 1) nel web worker appena generato (worker 2)?Variabile globale in Web worker

Quando ho provato a utilizzare jQuery in web worker, ottengo l'errore "finestra non definita". C'è un modo per usare jQuery in un Web Worker?

 
importScripts('jquery-latest.js'); 

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


    } 
    }); 
} 

fetch_ajax('test.txt'); 
+0

ti sembra di avere chiesto a due domande qui. Le domande di StackOverflow dovrebbero essere tenute separate. Sono abbastanza sicuro che la domanda di jQuery abbia già una risposta, quindi probabilmente è meglio rimuovere quella parte dalla tua domanda. –

risposta

31

I Web worker non dispongono di un oggetto window.

Per accedere allo stato globale, utilizzare invece self, codice che funzionerà sia sul thread principale che sul thread di lavoro.

Tuttavia, non è ancora possibile accedere o manipolare il genitore DOM (ad esempio ottenere window.jQuery tramite self.jQuery).

Mentre la finestra principale di thread self punta all'oggetto Window, in thread di lavoro self punti a un oggetto WorkerGlobalScope separato.

+2

Tnx ho praticamente provato e ho trovato che non sono in grado di accedere a una variabile in worker1 in worker2. Inoltre, non è possibile utilizzare jQuery in quanto non vi è accesso all'oggetto della finestra. Invece, ho usato XHR nativo e ho restituito la risposta con successo ... – Nigilan

+2

Ed è una cosa ** buona **. La comunicazione con i lavoratori avviene tramite messaggi (metodo «PostMessage» e evento «onmessage»). L'accesso al DOM o ad alcune variabili condivise causerebbe molti errori brutti ... – user1068352

+0

La mia comprensione è che l'ambito globale in ogni web worker e nel thread principale (la pagina web), sono tutti separati, ma che in ogni caso , è possibile accedervi tramite l'oggetto 'self'. Nel thread principale, 'self' è un sinonimo di' window'. È questa la tua comprensione, o intendevi qualcos'altro? –