Wie kann ich auf eine andere Datei in JS WebWorkern zugreifen?


09.07.2020, 20:11

Antwort:

Es lassen sich Scripts mit

importScripts("Pfad zur Datei");

importieren.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ich habe zwar noch nie damit gearbeitet, aber ich denke, dass du einfach wie du es mit der „worker.js" machst, machen musst.

//Main.js
const worker = new Worker(„worker.js“);
worker.postMessage(„parameter“);

//worker.js
const andere = new Andere(„andere.js“);
onmessage = (e)=>{
andere.andereFunktion(e.data);
};

//andere.js
andereFunction....
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker für Systemintegration / Freelance als AWE

NIleis 
Fragesteller
 07.07.2020, 13:58

Das müsste zwar gehen, allerdings ist meine Frage wie ich auf die Funktion zugreifen kann wenn sie in einer anderen Datei ist.

Der worker hat nämlich keinen Zugriff auf die in der HTML Datei eingebunden Scripts.

0
flumex  07.07.2020, 14:04
@NIleis

Du meinst z. B. jQuery in deinem Webworker verwenden?

1
flumex  08.07.2020, 12:41
@NIleis

Da es eine Skriptsprache ist und Du in der HTML alles zusammenfügst, muss das wie folgt strukturiert sein:

  • Ressource (JS)
  • WebWorker

So kann der WebWorker auf die Ressource und seinen Funktionen und Variablen zugreifen.

0
NIleis 
Fragesteller
 08.07.2020, 22:59
@flumex

Der webworker wird allerdings nicht in der HTML Datei eingefügt sondern über

var worker = new Worker(„Pfad zur Datei);

geladen und ist somit unabhängig von dieser und den davon geladenen Scripten

0
flumex  08.07.2020, 23:10
@NIleis

*fässtsichandenkopf*

Ja natürlich. Folgende Datei vor allen anderen JS-Dateien laden & dann sollte es gehen :p

var document = self.document = { parentNode: null, nodeType: 9, toString: function () { return "FakeDocument" } };
var window = self.window = self;
var fakeElement = Object.create(document);
fakeElement.nodeType = 1;
fakeElement.toString = function () { return "FakeElement" };
fakeElement.parentNode = fakeElement.firstChild = fakeElement.lastChild = fakeElement;
fakeElement.ownerDocument = document;

document.head = document.body = fakeElement;
document.ownerDocument = document.documentElement = document;
document.getElementById = document.createElement = function () { return fakeElement; };
document.createDocumentFragment = function () { return this; };
document.getElementsByTagName = document.getElementsByClassName = function () { return [fakeElement]; };
document.getAttribute = document.setAttribute = document.removeChild =
    document.addEventListener = document.removeEventListener =
    function () { return null; };
document.cloneNode = document.appendChild = function () { return this; };
document.appendChild = function (child) { return child; };
document.childNodes = [];
document.implementation = {
    createHTMLDocument: function () { return document; }
}
0
NIleis 
Fragesteller
 09.07.2020, 01:33
@flumex

Es tut mir leid, allerdings bin ich mir nicht sicher wie deine Antwort gemeint ist.

soll ich das in der HTML Datei ausführen?

wenn ja: Das ändert nichts an dem Problem.

wenn nein: Der webworker hat keinen Zugriff auf das Dom und die entsprechenden Funktionen.

0
NIleis 
Fragesteller
 09.07.2020, 20:10
@flumex

Ich hab nochmal recherchiert und anscheinend kann man Scripts mit

importScripts("Pfad zur Datei");

laden.

0
flumex  10.07.2020, 10:09
@NIleis

Ist auch möglich. In dem Code oben wird der DOM geklont und so kann dort z. B . jQuery geladen werden.

1
NIleis 
Fragesteller
 10.07.2020, 10:55
@flumex

Das funktioniert leider nicht weil der Worker auch keinen Zugriff auf die entsprechenden Funktionen hat.

0
flumex  10.07.2020, 11:17
@NIleis

Der Worker wird mit jQuery in einen DOM geladen. Ich müsste da mal den Code vor augen haben.

Scheint ja aber schon gelöst zu sein.

1