我有一个应用程序,它通过JavaScriptCore在webkit-gtk浏览器中扩展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中调用它们 .
我试过像这样得到 Worker
对象:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
但是这会将它添加到 WorkerConstructor
对象中,并且当调用 new Worker()
时,这些类不可用 .
2 回答
在大多数常见浏览器实现中启动Web worker之前,无法修改WorkerGlobalScope或类似的范围/上下文 . 只要此特定Web工作程序启动,这些范围就可用于Web工作者上下文 .
使用共享方法的唯一方法是在单独的共享文件/资源中定义它们并使用importScripts()包含它们
Sources
WorkerGlobalScope
DedicatedWorkerGlobalScope
SharedWorkerGlobalScope
使用“importScripts()”与WorkerGlobalScope共享资源