Mam aplikację, która rozszerza JavaScript przez JavaScriptCore w przeglądarce webkit-gtk. W tej chwili mam kilka klas, które dodaję do globalnego kontekstu, w ten sposób:
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);
}
Teraz chciałbym również dodać te klasy do kontekstu WebWorkera, abym mógł je wywoływać z pracowników, których instancja została utworzona w JS.
Próbowałem uzyskać Worker
obiekt w następujący sposób:
JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker");
JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL);
JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL);
JSStringRelease(workerStr);
Ale to dodaje go do WorkerConstructor
obiektu, a kiedy new Worker()
wywoływana jest a , klasy nie są dostępne.
javascript
webkit
customization
web-worker
javascriptcore
Pedro Vanzella
źródło
źródło
Worker
definicji klasy. Zwykle musisz dodać swoją klasę do obiektu Global i do każdego obiektu globalnego w nowo utworzonym JSVirtualMachine.Worker
stworzy nowyJSVirtualMachine
z jego globalnym kontekstem i globalnym obiektem; całkowicie oddzielone środowiskoOdpowiedzi:
Nie ma możliwości zmodyfikowania
WorkerGlobalScope
lub porównywalnych zakresów / kontekstów przed uruchomieniem programu Web Worker w większości popularnych implementacji przeglądarek. Te zakresy stają się dostępne tylko dla kontekstu pracowników sieci Web, gdy tylko ten konkretny pracownik sieciowy zostanie uruchomiony.Jedynym sposobem użycia współdzielonych metod jest zdefiniowanie ich w oddzielnym udostępnionym pliku / zasobie i dołączenie ich przy użyciu
importScripts()
Źródła
źródło
Użyj metody „importScripts ()”, aby udostępnić zasoby WorkerGlobalScope
źródło