Pregunta

Me pregunto si puedo usar jQuery dentro del archivo de trabajadores web. Google Chrome me da este error: "ReferenceError de referencia no capturado: $ no está definido".

Aquí está el código: el archivo principal:

var loader = new Worker(BASE_URL + "js/rss_loader_worker.js");
// Ask the worker to start loading the RSS from the server
loader.postMessage("loadRss");
// When receive the response from the server
loader.onmessage = function (event) {
  console.log(event.data);
}

El archivo del trabajador:

onmessage = function (event) {
  if (event.data === "loadRss") {
    loadRss();
  }
}

/**
 * This function handles the AJAX request to the server side
 * then pass the content to the view page
 * @param none
 * @return html text
 */
loadRss = function () {
  $.ajax({
    data: {city: CITY_LOCATION},
    url: BASE_URL + "/getfeeds",
    onsucess: function (data) {

    }
  });
}

Por favor ayuda, gracias :)

¿Fue útil?

Solución

No tu no poder. No hay acceso a los componentes seguros que no sean de thread o el DOM y debe transmitir datos específicos dentro y fuera de un hilo a través de objetos serializados. Por lo tanto, debe trabajar muy duro para causar problemas en su código. JQuery es una biblioteca DOM JavaScript.

Pero puedes usar un nativo XMLHttpRequest Sin embargo, en tu trabajador.

Y la importación de scripts externos no va a través de la página con un script Etiqueta: Usar importscripts () para eso en su archivo de trabajadores.

Otros consejos

Esto es lo que encontré:

Puede cargar archivos o bibliotecas de script externos en un trabajador con el importScripts() función.

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-enviornment-loadingscriptss

importScripts('script1.js');
importScripts('script2.js');

o

importScripts('script1.js', 'script2.js');

Aunque no puede cargar jQuery, porque jQuery requiere acceso DOM, que los trabajadores web no tienen.

Dado que los trabajadores web están en archivos externos, no tienen acceso a los siguientes objetos JavaScript:

  • El objeto de la ventana
  • El objeto del documento
  • El objeto principal

Por lo tanto, no puede usar $ dentro del archivo de trabajadores. Mejor puedes usar Ajax tradicional algo como esto

if (window.XMLHttpRequest)
{
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
}
else
{
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

Referencia a http://www.w3schools.com/html/html5_webworkers.asp

El entorno de ejecución en Node.js también carece de una implementación nativa de DOM. Creo que es justo decir que los trabajadores web Node.js y HTML5 comparten ciertas restricciones.

Hay formas de simular una implementación DOM con el propósito de usar jQuery en node.js. Si aún desea usar jQuery en los trabajadores web, creo que debe buscar las soluciones Node.js y ver si se aplican.

JQuery es principalmente para trabajar con el DOM y trabajar con páginas web. Por lo tanto, no es tan adecuado para los trabajadores web que no tienen acceso al DOM.

Es posible que desee utilizar una biblioteca de servicios públicos en lugar de una biblioteca DOM, como subrayado.js, o tal vez alguien debería hacer una biblioteca de JQuery Worker, una versión de luz despojada de jQuery sin toda la funcionalidad de manipulación DOM, solo manteniendo las funciones de utilidad.

Eche un vistazo a este complemento https://github.com/rwldrn/jquery-hive

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top