जावास्क्रिप्टकोर में वेबवर्कर के संदर्भ में एक नया मूल वर्ग कैसे जोड़ें?


102

मेरे पास एक एप्लिकेशन है जो एक वेबकिट-जीईके ब्राउज़र में जावास्क्रिप्ट को जावास्क्रिप्ट के माध्यम से बढ़ाता है। अभी मेरे पास कई वर्ग हैं जिन्हें मैं वैश्विक संदर्भ में जोड़ता हूं जैसे:

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);
}

अब, मैं उन वर्गों को वेबवर्क के संदर्भ में भी जोड़ना चाहूंगा, इसलिए मैं उन्हें 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()कहा जाता है, तो कक्षाएं उपलब्ध नहीं हैं।


1
बिल्कुल अपनी आवश्यकता के बारे में निश्चित नहीं। लेकिन मुझे लगता है कि हम एक स्क्रिप्ट को शामिल कर सकते हैं जो कार्यकर्ता फ़ाइल में ऐसा करती है। इस तरह। importScripts ("GlobalWorker.js")
राजेश

1
आप वर्कर क्लास को वैश्विक संदर्भ में डाल रहे हैं, आपको उन्हें वेबवॉकर के संदर्भ में जोड़ना चाहिए न कि मुख्य संदर्भ में क्योंकि दोनों संदर्भ अलग-अलग हैं।
करीम एच

4
आप नए बनाए गए वर्ग को Workerवर्ग परिभाषा में जोड़ने का प्रयास कर रहे हैं । आम तौर पर आपको अपनी कक्षा को ग्लोबल ऑब्जेक्ट और प्रत्येक ग्लोबल ऑब्जेक्ट में एक नए बनाए गए JSVirtualMachine में जोड़ना होगा। यह वैश्विक संदर्भ और वैश्विक वस्तु के साथ Workerएक नया सृजन करेगा JSVirtualMachine; एक पूरी तरह से अलग
वातावरण

जवाबों:


1

WorkerGlobalScopeसबसे आम ब्राउज़र कार्यान्वयन में वेब कार्यकर्ता शुरू होने से पहले या तुलनीय स्कोप / संदर्भ को संशोधित करने का कोई तरीका नहीं है। जैसे ही यह विशिष्ट वेब वर्कर लॉन्च किया जाता है, ये स्कोप केवल वेब वर्कर्स के संदर्भ में उपलब्ध हो जाते हैं।

साझा तरीकों का उपयोग करने का एकमात्र तरीका उन्हें एक अलग साझा फ़ाइल / संसाधन में परिभाषित करना और उन्हें शामिल करना शामिल है importScripts()

self.importScripts('foo.js');
self.importScripts('foo.js', 'bar.js', ...);
importScripts('foo.js');
importScripts('foo.js', 'bar.js', ...);

नोट: importScripts() और self.importScripts()प्रभावी रूप से समतुल्य हैं - दोनों importScripts()कार्यकर्ता के आंतरिक दायरे के अंदर से बुलाए जाने का प्रतिनिधित्व करते हैं ।


सूत्रों का कहना है


0

वर्कर्सग्लोइस्कोप के साथ संसाधनों को साझा करने के लिए "importScripts ()" का उपयोग करें

importScripts('resource.js');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.