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 Workerobjek 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 WorkerConstructorobjek, dan ketika a new Worker()dipanggil, kelas tidak tersedia.
Workerdefinisi kelas. Biasanya Anda perlu menambahkan kelas Anda ke objek Global dan ke setiap Objek Global dalam JSVirtualMachine yang baru dibuat. Workerakan membuat baru JSVirtualMachinedengan konteks global dan objek globalnya; lingkungan yang benar-benar terpisah