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.
javascript
webkit
customization
web-worker
javascriptcore
Pedro Vanzella
fonte
fonte
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 novoJSVirtualMachine
com seu contexto global e objeto global; um ambiente totalmente separadoRespostas:
Não há como modificar os
WorkerGlobalScope
escopos / contextos comparáveis antes que um web worker seja iniciado nas implementações de navegador mais comuns. Esses escopos tornam-se disponíveis apenas para o contexto dos web workers assim que esse web worker específico é iniciado.A única maneira de usar métodos compartilhados é defini-los em um arquivo / recurso compartilhado separado e incluí-los usando
importScripts()
Fontes
fonte
Use "importScripts ()" para compartilhar os recursos com o WorkerGlobalScope
fonte