Tengo una aplicación que extiende JavaScript a través de JavaScriptCore, en un navegador webkit-gtk. En este momento tengo varias clases que agrego al contexto global así:
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);
}
Ahora, me gustaría agregar también esas clases al contexto de WebWorker, para poder llamarlas desde los trabajadores instanciados en JS.
Intenté obtener el Worker
objeto así:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Pero eso lo agrega al WorkerConstructor
objeto, y cuando new Worker()
se llama a, las clases no están disponibles.
Worker
la definición de clase. Normalmente, debe agregar su clase al objeto Global y a cada Objeto Global dentro de una nueva JSVirtualMachine creada. Worker
creará un nuevo JSVirtualMachine
con su contexto global y objeto global; un entorno totalmente separado