2012-06-27 14 views
20

Estoy utilizando este trabajador web que tiene una variable global declarada en él. ¿Puedo acceder a la misma (variable global en el trabajador 1) en el trabajador web recién generado (trabajador 2)?Variable global en el trabajador web

Cuando he intentado usar jQuery en el trabajador web, aparece el error "la ventana no está definida". ¿Hay alguna forma de usar jQuery en 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

Usted parece haber pedido a dos preguntas aquí. Las preguntas de StackOverflow deben mantenerse separadas. Estoy bastante seguro de que la pregunta de jQuery ya está respondida, por lo que es mejor simplemente eliminar esa parte de su pregunta. –

Respuesta

31

Web Workers no tienen un objeto window.

Para acceder al estado global, use self, código que funcionará tanto en el hilo principal como en el hilo del trabajador.

Pero tenga en cuenta que todavía no podrá acceder o manipular el elemento principal DOM (por ejemplo, obtenga window.jQuery a través de self.jQuery).

Mientras que la ventana de subproceso principal self apunta al objeto Ventana, en los subprocesos self apunta a un objeto WorkerGlobalScope separado.

+2

Tnx Probé prácticamente y descubrí que no puedo acceder a una variable en worker1 en worker2. Y tampoco puede usar jQuery ya que no hay acceso al objeto ventana. En cambio, utilicé el XHR nativo y devolví la respuesta con éxito ... – Nigilan

+2

Y es una cosa ** buena **. La comunicación con los trabajadores es a través de mensajes (método 'PostMessage' y evento' onmessage'). El acceso a DOM o algunas variables compartidas daría lugar a muchos errores desagradables ... – user1068352

+0

Según tengo entendido, el alcance global en cada trabajador web, y en el hilo principal (la página web), son todos separados, pero eso en cada caso , se puede acceder a través del objeto 'self'. En el hilo principal, 'self' es un sinónimo de' window'. ¿Esto también lo entiendes o quisiste decir algo más? –