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.
javascript
webkit
customization
web-worker
javascriptcore
Pedro Vanzella
la source
la source
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 nouveauJSVirtualMachine
avec son contexte global et son objet global; un environnement totalementRéponses:
Il n'existe aucun moyen de modifier les
WorkerGlobalScope
étendues / contextes ou des contextes comparables avant de démarrer un travailleur Web dans la plupart des implémentations de navigateur courantes. Ces étendues ne sont disponibles que pour le contexte des travailleurs Web dès que ce travailleur Web spécifique est lancé.La seule façon d'utiliser des méthodes partagées est de les définir dans un fichier / ressource partagé distinct et de les inclure à l'aide de
importScripts()
Sources
la source
Utilisez "importScripts ()" pour partager les ressources avec WorkerGlobalScope
la source