我有一个在webkit-gtk浏览器中通过JavaScriptCore扩展JavaScript的应用程序。现在,我有几个类可以添加到全局上下文中,如下所示:
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);
}
现在,我还要将这些类添加到WebWorker的上下文中,以便可以从JS中实例化的工作程序中调用它们。
我试着Worker
像这样获取对象:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
但这会将其添加到WorkerConstructor
对象中,并且在new Worker()
调用a时,这些类不可用。
1
不完全确定您的要求。但是我认为我们可以在工作文件中包含一个执行此操作的脚本。像这样。importScripts( “globalWorker.js”)
—
拉杰什
您要将Worker类放在全局上下文中,应该将它们添加到WebWorker的上下文中而不是主要上下文中,因为这两个上下文是不同的。
—
卡里姆H
您正在尝试将新创建的类添加到
—
十月
Worker
类定义中。通常,您需要将类添加到全局对象以及新创建的JSVirtualMachine中的每个全局对象。Worker
将JSVirtualMachine
使用其全局上下文和全局对象创建一个新对象;完全分离的环境