6

के साथ वेब वर्कर में 'नया फ़ंक्शन' सक्षम करें मुझे वेब वर्कर में काम करने के लिए new Function प्राप्त करने में समस्या हो रही है। मेरे पास एक HTML पृष्ठ है जो वेब वर्कर को जन्म देता है। यह वेब वर्कर new Function(str) के माध्यम से कोड निष्पादित करता है। मैं इसे एक पैक किए गए क्रोम ऐप में उपयोग करने की कोशिश कर रहा हूं, जिसके लिए eval का उपयोग करके एक पृष्ठ की आवश्यकता होती है-जैसे कोड को स्पष्ट रूप से मैनिफेस्ट में एक सैंडबॉक्स पृष्ठ के रूप में सूचीबद्ध किया जाना चाहिए।सीएसपी

  • सूची करते पेज सैंडबॉक्स जाना है:

    अब, वहाँ दो विकल्प हैं। यदि मैं ऐसा करता हूं, तो मैं new Function का उपयोग कर सकता हूं, लेकिन मैं वेब वर्कर को नहीं बढ़ा सकता क्योंकि मैं कोई अनुरोध नहीं कर सकता (सैंडबॉक्स वाले पृष्ठ की एक अद्वितीय उत्पत्ति है)। new Worker(...)SECURITY_ERR फेंकता है। खिलौने के डिब्बे में

    • new Function काम करता है अद्वितीय मूल के कारण
    • new Worker खिलौने के डिब्बे में विफल रहता है
  • नहीं सूची पेज सैंडबॉक्स किए जाने की है। यदि मैं ऐसा करता हूं, तो मैं एक वेब वर्कर उत्पन्न कर सकता हूं, लेकिन कार्यकर्ता new Function का उपयोग नहीं कर सकता क्योंकि यह सैंडबॉक्स नहीं है। new Function(...) इसके उपयोग के बारे में शिकायत करते हुए EvalError फेंकता है।
    • new Function गैर-सैंडबॉक्स में किया जा रहा eval तरह
    • new Worker काम करता है की वजह से गैर-सैंडबॉक्स में विफल रहता है

मेरे सीएसपी इस प्रकार है:

sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self' 

मैं क्या कर सकते हैं वेब वर्कर में new Function काम करने के लिए क्या करें?

उत्तर

5

इनलाइन श्रमिक नामक एक तकनीक है, मैं इसका उपयोग करने का सुझाव दूंगा।

  • एक ब्लॉब ऑब्जेक्ट कि कार्यकर्ता के लिए स्रोत कोड शामिल बनाएं
  • एक "dataurl"
  • करने के लिए इसे कन्वर्ट इस dataurl

इस के साथ कार्यकर्ता इन्स्तांत पर उदाहरण कोड के साथ वर्णन किया गया है एचटीएमएल 5 चट्टानों की साइट उनके WebWorkers tutorial में। इस तरह आप साइट को सैंडबॉक्स के रूप में सूचीबद्ध कर सकते हैं, लेकिन बाहरी अनुरोध करने की कोई आवश्यकता नहीं है, इसलिए इसे सैंडबॉक्स मोड में भी काम करना चाहिए।

+0

यह पता चला कि 'डेटा:' यूआरएल समान मूल मुद्दों के कारण काम नहीं करते हैं, लेकिन ब्लॉब्स से (createObjectURL' URL) लेख काम करते हैं। पूरे कार्यकर्ता स्क्रिप्ट को मुख्य पृष्ठ में इनलाइन करना बहुत सुविधाजनक नहीं है, लेकिन ऐसा लगता है कि यह काम करने का एकमात्र तरीका है। धन्यवाद। – pimvdb

+0

ओह अब मैं देख सकता हूं कि मैंने उत्तर में ऑब्जेक्ट यूआरएल के बजाय डेटा यूआरएल का इस्तेमाल किया, इसके लिए खेद है। आप इसे अधिक सुविधाजनक बनाने के लिए शायद एक बिल्ड कदम कर सकते हैं। – molnarg

संबंधित मुद्दे

 संबंधित मुद्दे