Ho un'applicazione che estende JavaScript tramite JavaScriptCore, in un browser webkit-gtk. In questo momento ho diverse classi che aggiungo al contesto globale in questo modo:
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);
}
Ora, vorrei aggiungere anche quelle classi al contesto del WebWorker, così posso chiamarle dai lavoratori istanziati in JS.
Ho provato a ottenere l' Worker
oggetto in questo modo:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Ma questo lo aggiunge WorkerConstructor
all'oggetto e quando new Worker()
viene chiamato a, le classi non sono disponibili.
Worker
definizione della classe. Normalmente devi aggiungere la tua classe all'oggetto Global e ad ogni Oggetto Global all'interno di una nuova JSVirtualMachine creata. Worker
creerà un nuovo JSVirtualMachine
con il suo contesto globale e l'oggetto globale; un ambiente totalmente separato