如何在JavaScriptCore中将新的本机类添加到WebWorker的上下文中?

我有一个通过JavaScriptCore在webkit gtk浏览器中扩展JavaScript的应用程序。现在,我在全局上下文中添加了几个类,如下所示:

void create_js(gpointer context,char*className,JSClassDefinition clasDefinition){
JSClassRef classDef=JSClassCreate(&clasDefinition);
JSObjectRef classObj=JSObjectMake(上下文、类定义、上下文);
JSObjectRef GlobalObject=JSContextGetGlobalObject(上下文);
JSStringRef str=JSStringCreateWithUTF8CString(类名称);
JSObjectSetProperty(上下文,globalObj,str,classObj,kJSPropertyAttributeOne,NULL);
JSSTRING释放(str);
}

现在,我还想将这些类添加到WebWorker的上下文中,以便可以从JS中实例化的workers调用它们

我尝试过像这样获取Worker对象:

JSStringRef-workerStr=JSStringCreateWithUTF8CString(“Worker”);
JSObjectRef worker=JSObjectGetProperty(上下文,globalObj,workerStr,NULL);
JSObjectSetProperty(上下文、工作者、str、classObj、kJSPropertyAttributeOne、NULL);
JSStringRelease(workerStr);

但这会将其添加到WorkerConstructor对象中,当调用newworker()时,这些类不可用

在大多数常见的浏览器实现中,在启动web worker之前,无法修改WorkerGlobalScope或类似的作用域/上下文。一旦启动此特定web worker,这些作用域将仅对web worker上下文可用

使用共享方法的唯一方法是在单独的共享文件/资源中定义它们,并使用importScripts()

self.importScripts('foo.js');
self.importScripts('foo.js','bar.js',…);
进口文件('foo.js');
importScripts('foo.js','bar.js',…);

注意:importScripts()self.importScripts()实际上是等效的-两者都表示从工作人员的内部范围调用importScripts()


来源

  • 工作球镜
  • 专用工作球镜
  • SharedWorkerGlobalScope

发表评论