ฉันมีแอปพลิเคชันที่ขยาย JavaScript ผ่าน JavaScriptCore ในเบราว์เซอร์ 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
วัตถุและเมื่อnew Worker()
เรียกใช้คลาสจะไม่พร้อมใช้งาน
Worker
นิยามคลาส โดยปกติคุณต้องเพิ่มคลาสของคุณไปยัง Global object และใน Global Object ทุกตัวภายใน JSVirtualMachine ที่สร้างขึ้นใหม่ Worker
จะสร้างสิ่งใหม่ที่JSVirtualMachine
มีบริบทส่วนกลางและวัตถุระดับโลก สภาพ