Ich habe eine Anwendung, die JavaScript über JavaScriptCore in einem Webkit-GTK-Browser erweitert. Im Moment habe ich mehrere Klassen, die ich dem globalen Kontext wie folgt hinzufüge:
void create_js(gpointer context, char* className, JSClassDefinition clasDefinition) {
JSClassRef classDef = JSClassCreate(&clasDefinition);
JSObjectRef classObj = JSObjectMake(context, classDef, context);
JSObjectRef globalObj = JSContextGetGlobalObject(context);
JSStringRef str = JSStringCreateWithUTF8CString(className);
JSObjectSetProperty(context, globalObj, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(str);
}
Jetzt möchte ich diese Klassen auch zum WebWorker-Kontext hinzufügen, damit ich sie von in JS instanziierten Workern aufrufen kann.
Ich habe versucht, das Worker
Objekt so zu bekommen:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Aber das fügt es dem WorkerConstructor
Objekt hinzu, und wenn a new Worker()
aufgerufen wird, sind die Klassen nicht verfügbar.
javascript
webkit
customization
web-worker
javascriptcore
Pedro Vanzella
quelle
quelle
Worker
Klassendefinition hinzuzufügen . Normalerweise müssen Sie Ihre Klasse dem globalen Objekt und jedem globalen Objekt in einer neu erstellten JSVirtualMachine hinzufügen.Worker
wird ein neuesJSVirtualMachine
mit seinem globalen Kontext und seinem globalen Objekt erstellen ; eine völlig getrennteAntworten:
Es gibt keine Möglichkeit, die
WorkerGlobalScope
oder vergleichbare Bereiche / Kontexte zu ändern, bevor ein Web-Worker in den meisten gängigen Browser-Implementierungen gestartet wird. Diese Bereiche stehen nur dem Web-Worker-Kontext zur Verfügung, sobald dieser spezielle Web-Worker gestartet wird.Die einzige Möglichkeit, gemeinsam genutzte Methoden zu verwenden, besteht darin, sie in einer separaten gemeinsam genutzten Datei / Ressource zu definieren und sie mithilfe von einzuschließen
importScripts()
Quellen
quelle
Verwenden Sie "importScripts ()", um die Ressourcen für WorkerGlobalScope freizugeben
quelle