JavaScriptCoreを介してJavaScriptを拡張するアプリケーションをwebkit-gtkブラウザーで使用しています。現在、いくつかのクラスをグローバルコンテキストに追加しています。
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
オブジェクトに追加し、a new Worker()
が呼び出されると、クラスは使用できなくなります。
1
正確にあなたの要件についてわからない。しかし、これを行う1つのスクリプトをワーカーファイルに含めることができると思います。このような。importScripts( "globalWorker.js")
—
rajesh
Workerクラスをグローバルコンテキストに配置している場合、2つのコンテキストが異なるため、メインコンテキストではなくWebWorkerのコンテキストに追加する必要があります。
—
Karim H
新しく作成したクラスを
—
dectroo
Worker
クラス定義に追加しようとしています。通常、クラスをグローバルオブジェクトと、新しく作成されたJSVirtualMachine内のすべてのグローバルオブジェクトに追加する必要があります。グローバルコンテキストとグローバルオブジェクトでWorker
新しいJSVirtualMachine
を作成します。完全に分離された環境