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 Workerobjeto 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 WorkerConstructorobjeto, y cuando new Worker()se llama a, las clases no están disponibles.
javascript
webkit
customization
web-worker
javascriptcore
Pedro Vanzella
fuente
fuente

Workerla definición de clase. Normalmente, debe agregar su clase al objeto Global y a cada Objeto Global dentro de una nueva JSVirtualMachine creada.Workercreará un nuevoJSVirtualMachinecon su contexto global y objeto global; un entorno totalmente separadoRespuestas:
No hay forma de modificar los
WorkerGlobalScopeámbitos o contextos comparables antes de que se inicie un trabajador web en las implementaciones de navegador más comunes. Estos ámbitos están disponibles solo para el contexto de los trabajadores web tan pronto como se inicia este trabajador web específico.La única forma de usar métodos compartidos es definirlos en un archivo / recurso compartido separado e incluirlos usando
importScripts()Fuentes
fuente
Utilice "importScripts ()" para compartir los recursos con WorkerGlobalScope
fuente