Domanda

Mi chiedo se posso usare jQuery all'interno del file web worker. Google Chrome mi dà questo errore: "Non è definito il referenze: $ non è definito".

Ecco il codice: il file principale:

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);
}

Il file del lavoratore:

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) {

    }
  });
}

Per favore aiutatemi, grazie :)

È stato utile?

Soluzione

Non tu non può. Non c'è accesso a componenti sicuri non thread o DOM e devi passare dati specifici dentro e fuori un thread attraverso oggetti serializzati. Quindi devi lavorare molto duramente per causare problemi nel tuo codice. JQuery è una libreria DOM JavaScript.

Ma puoi usare un nativo XMLHttpRequest Nel tuo lavoratore comunque.

E l'importazione di script esterni non va tramite la pagina con a script Tag: usa importScripts () Per questo nel tuo file di lavoratore.

Altri suggerimenti

Ecco cosa ho trovato:

È possibile caricare file di script esterni o librerie in un lavoratore con il importScripts() funzione.

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

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

o

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

Tuttavia, non è possibile caricare jQuery, perché jQuery richiede l'accesso DOM, quali lavoratori web non hanno.

Poiché i lavoratori web sono in file esterni, non hanno accesso ai seguenti oggetti JavaScript:

  • L'oggetto della finestra
  • L'oggetto del documento
  • L'oggetto genitore

Quindi non è possibile utilizzare $ all'interno del file di lavoratore. Meglio puoi usare Ajax tradizionale qualcosa del genere

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

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

L'ambiente di esecuzione in Node.js manca anche di un'implementazione DOM nativa. Penso che sia giusto dire che Node.js e HTML5 Web Workers condividano alcune restrizioni.

Esistono modi per simulare un'implementazione DOM allo scopo di utilizzare jQuery in node.js. Se vuoi ancora utilizzare jQuery nei lavoratori web, penso che dovresti cercare le soluzioni Node.js e vedere se si applicano.

JQuery è principalmente per lavorare con il DOM e lavorare con le pagine Web. Quindi non è così adatto per i lavoratori web che non hanno accesso al DOM.

Potresti voler usare una libreria di utilità anziché una libreria DOM, come ad esempio sottoscritto.js, o forse qualcuno dovrebbe realizzare una biblioteca di lavoratori jQuery, una versione leggera di jQuery senza tutte le funzionalità di manipolazione DOM, mantenendo solo le funzioni di utilità.

Dai un'occhiata a questo plug-in https://github.com/rwldrn/jquery-hive

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top