繁体   English   中英

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

[英]How to Add a new native class to WebWorker's context in JavaScriptCore?

我有一个应用程序,它通过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() ,这些类不可用。

在大多数常见浏览器实现中启动Web worker之前,无法修改WorkerGlobalScope或类似的范围/上下文。 只要此特定Web工作程序启动,这些范围就可用于Web工作者上下文。

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

self.importScripts('foo.js');
self.importScripts('foo.js', 'bar.js', ...);
importScripts('foo.js');
importScripts('foo.js', 'bar.js', ...);

注意: importScripts()self.importScripts()实际上是等效的 - 都表示从worker的内部作用域内部调用importScripts()


来源

使用“importScripts()”与WorkerGlobalScope共享资源

importScripts('resource.js');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM