J'ai une application qui étend JavaScript via JavaScriptCore, dans un navigateur webkit-gtk. En ce moment, j'ai plusieurs classes que j'ajoute au contexte global comme ceci:
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);
}
Maintenant, j'aimerais également ajouter ces classes au contexte du WebWorker, afin que je puisse les appeler à partir de workers instanciés dans JS.
J'ai essayé d'obtenir l' Worker
objet comme ceci:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Mais cela l'ajoute à l' WorkerConstructor
objet, et quand a new Worker()
est appelé, les classes ne sont pas disponibles.
Worker
la définition de classe. Normalement, vous devez ajouter votre classe à l'objet Global et à chaque objet global dans une nouvelle JSVirtualMachine créée. Worker
créera un nouveau JSVirtualMachine
avec son contexte global et son objet global; un environnement totalement