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. Workersẽ tạo ra một cái mới JSVirtualMachinevớ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