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 WorkerObjekt 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 WorkerConstructorObjekt hinzu, und wenn a new Worker()aufgerufen wird, sind die Klassen nicht verfügbar.
WorkerKlassendefinition hinzuzufügen . Normalerweise müssen Sie Ihre Klasse dem globalen Objekt und jedem globalen Objekt in einer neu erstellten JSVirtualMachine hinzufügen. Workerwird ein neues JSVirtualMachinemit seinem globalen Kontext und seinem globalen Objekt erstellen ; eine völlig getrennte