Eu tenho um aplicativo que estende o JavaScript via JavaScriptCore, em um navegador webkit-gtk. No momento, tenho várias classes que adiciono ao contexto global, como:
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);
}
Agora, eu gostaria também de adicionar essas classes ao contexto do WebWorker, para que eu possa chamá-las de workers instanciados em JS.
Eu tentei pegar o Worker
objeto assim:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Mas isso o adiciona ao WorkerConstructor
objeto e, quando a new Worker()
é chamado, as classes não estão disponíveis.
Worker
definição de classe. Normalmente você precisa adicionar sua classe ao objeto global e a cada objeto global dentro de um novo JSVirtualMachine criado. Worker
criará um novo JSVirtualMachine
com seu contexto global e objeto global; um ambiente totalmente separado