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.
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 neues JSVirtualMachine
mit seinem globalen Kontext und seinem globalen Objekt erstellen ; eine völlig getrennte