我有一个通过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