У меня есть приложение, которое расширяет 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()
вызывается, классы недоступны.
javascript
webkit
customization
web-worker
javascriptcore
Педро Ванцелла
источник
источник
Worker
определение класса. Обычно вам нужно добавить свой класс к глобальному объекту и к каждому глобальному объекту в новом созданном JSVirtualMachine.Worker
создаст новыйJSVirtualMachine
с его глобальным контекстом и глобальным объектом; полностью отделенная средаОтветы:
В
WorkerGlobalScope
большинстве распространенных реализаций браузера невозможно изменить или сопоставимые области / контексты до запуска веб-воркера. Эти области становятся доступными только для контекста веб-воркеров, как только этот конкретный веб-воркер запускается.Единственный способ использовать общие методы - определить их в отдельном общем файле / ресурсе и включить их с помощью
importScripts()
Источники
источник
Используйте importScripts () для совместного использования ресурсов с WorkerGlobalScope
источник