Saya memiliki aplikasi yang memperluas JavaScript melalui JavaScriptCore, di browser webkit-gtk. Saat ini saya memiliki beberapa kelas yang saya tambahkan ke konteks global seperti:
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);
}
Sekarang, saya juga ingin menambahkan kelas-kelas itu ke konteks WebWorker, jadi saya bisa memanggilnya dari pekerja yang dibuat di JS.
Saya sudah mencoba mendapatkan Worker
objek seperti ini:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Tapi itu menambahkannya ke WorkerConstructor
objek, dan ketika a new Worker()
dipanggil, kelas tidak tersedia.
Worker
definisi kelas. Biasanya Anda perlu menambahkan kelas Anda ke objek Global dan ke setiap Objek Global dalam JSVirtualMachine yang baru dibuat. Worker
akan membuat baru JSVirtualMachine
dengan konteks global dan objek globalnya; lingkungan yang benar-benar terpisah