我有一个在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使用其全局上下文和全局对象创建一个新对象;完全分离的环境