Frage

Ich frage mich, ob ich JQuery in der Web Worker -Datei verwenden kann. Google Chrome gibt mir einen Fehler: "Uncortht ReferenceError: $ ist nicht definiert".

Hier ist der Code: Die übergeordnete Datei:

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

Die Arbeiterdatei:

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

    }
  });
}

Bitte helfen Sie, danke :)

War es hilfreich?

Lösung

Nein du kann nicht. Es gibt keinen Zugriff auf nicht-thread-sichere Komponenten oder das DOM, und Sie müssen bestimmte Daten in und aus einem Thread über serialisierte Objekte übergeben. Sie müssen also sehr hart arbeiten, um Probleme in Ihrem Code zu verursachen. JQuery ist eine JavaScript -DOM -Bibliothek.

Aber Sie können einen Eingeborenen verwenden XMLHttpRequest in Ihrem Arbeiter jedoch.

Und das Import von externen Skripten führt nicht über die Seite mit a script Tag: Verwendung Importscripts () dafür in Ihrer Arbeiterdatei.

Andere Tipps

Hier ist, was ich gefunden habe:

Sie können externe Skriptdateien oder Bibliotheken in einen Arbeiter mit dem laden importScripts() Funktion.

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

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

oder

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

Obwohl Sie JQuery nicht laden können, weil JQuery DOM -Zugriff benötigt, die Web -Mitarbeiter nicht haben.

Da Web -Mitarbeiter in externen Dateien sind, haben sie keinen Zugriff auf die folgenden JavaScript -Objekte:

  • Das Fensterobjekt
  • Das Dokumentobjekt
  • Das übergeordnete Objekt

Sie können also $ in der Worker -Datei nicht verwenden. Besser können Sie so etwas traditionelles Ajax verwenden

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

Referenz bei http://www.w3schools.com/html/html5_webworkers.asp

In der Ausführungsumgebung in Node.js fehlt auch eine native DOM -Implementierung. Ich denke, es ist fair zu sagen, dass Node.js und HTML5 -Webarbeiter bestimmte Einschränkungen teilen.

Es gibt Möglichkeiten, eine DOM -Implementierung zu simulieren, um JQuery in node.js. Wenn Sie JQuery immer noch in Webarbeitern verwenden möchten, sollten Sie nach den Node.js -Lösungen suchen und prüfen, ob sie sich bewerben.

JQuery dient hauptsächlich zur Arbeit mit dem DOM und zur Arbeit mit Webseiten. Es ist also nicht so geeignet für Webarbeiter, die keinen Zugriff auf das DOM haben.

Möglicherweise möchten Sie eine Versorgungsbibliothek anstelle einer DOM -Bibliothek verwenden, wie z. B. unterstrichen.js, oder vielleicht sollte jemand eine JQuery Worker -Bibliothek erstellen, eine abgespeckte Lichtversion von JQuery ohne alle DOM -Manipulationsfunktionen, die nur die Nutzfunktionen beibehält.

Schauen Sie sich dieses Plug-In an https://github.com/rwldrn/jquery-hive

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top