Tôi có một ứng dụng mở rộng JavaScript qua JavaScriptCore, trong trình duyệt webkit-gtk. Ngay bây giờ tôi có một số lớp mà tôi thêm vào ngữ cảnh chung như vậy:
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);
}
Bây giờ, tôi cũng muốn thêm các lớp đó vào ngữ cảnh của WebWorker, vì vậy tôi có thể gọi chúng từ các worker được khởi tạo trong JS.
Tôi đã thử lấy Worker
đối tượng như vậy:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Nhưng điều đó sẽ thêm nó vào WorkerConstructor
đối tượng và khi a new Worker()
được gọi, các lớp sẽ không khả dụng.
Worker
định nghĩa lớp. Thông thường, bạn cần thêm lớp của mình vào đối tượng Toàn cục và vào mọi Đối tượng toàn cục trong JSVirtualMachine mới được tạo. Worker
sẽ tạo ra một cái mới JSVirtualMachine
với bối cảnh toàn cầu và đối tượng toàn cầu; một hoàn toàn tách environement