У мене є додаток, який розширює 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()викликається a , класи недоступні.
Workerвизначення класу. Зазвичай вам потрібно додати свій клас до об'єкта Global і до кожного глобального об'єкта в новому створеному JSVirtualMachine. Workerстворить новий JSVirtualMachineіз його глобальним контекстом та глобальним об’єктом; цілком відокремлене