Wie kann ich auf eine andere Datei in JS WebWorkern zugreifen?
Kann man irgendwie Klassen und Funktionen aus anderen Dateien laden und in webworkern benutzen?
//Main.js
const worker = new Worker(„worker.js“);
worker.postMessage(„parameter“);
//worker.js
onmessage = (e)=>{
funktionAusAndererDatei(e.data);
};
Antwort:
Es lassen sich Scripts mit
importScripts("Pfad zur Datei");
importieren.
1 Antwort
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....
*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; }
}
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.
Trotzdem danke.
Zum Code:
Gestartet wird der worker (Worker.js) in Main.js in start().
https://github.com/NilEis/JavaScript-Raytracer/tree/WebWorker/JS
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.