एक आईपीथॉन नोटबुक में, कोई निम्न कोड को रैपेल.जेएस को सफलतापूर्वक वैश्विक नामस्थान में लोड करने का कारण बनने की उम्मीद करेगा।आईपीथॉन नोटबुक के भीतर राफेल को कैसे लोड किया जा सकता है, requ.js के कारण उत्पन्न होने वाले कुछ मुद्दों से परहेज करना?
from IPython.display import Javascript
raphael_url = "https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"
Javascript('alert(Raphael);', lib=[raphael_url])
हालांकि, यह आईपीथन के हाल के संस्करणों में काम नहीं करता है जो requ.js का उपयोग करता है। बाहर निकलता है, Raphael.js, जो IPython jQuery.getScript()
का उपयोग करके लोड करता है, requ.js की उपस्थिति को पहचानता है और जैसे कि वह खुद को वैश्विक नेमस्पेस में नहीं डालता है। वास्तव में, यदि कोई व्यक्ति window.define
ऑब्जेक्ट को हटाते हुए जावास्क्रिप्ट कोड चलाता है, तो राफेल अब आवश्यक नहीं है। जेएस मौजूद है, और यह खुद को वैश्विक नेमस्पेस में शामिल करता है जैसा मैं चाहूंगा। दूसरे शब्दों में, कोड ऊपर निम्नलिखित चलाने के बाद काम करता है:
Javascript('window.define = undefined;')
इस प्रकार, एक ही रास्ता मैं राफेल IPython नोटबुक का नवीनतम संस्करण के भीतर लोड करने के लिए प्राप्त करने में सक्षम हूँ नष्ट करने के लिए है (या अलग सेट) window.define
।
समस्या की पहचान करने के बाद, मुझे यह जानने के लिए आवश्यक नहीं है कि सॉफ्टवेयर का कौन सा टुकड़ा प्रोटोकॉल के खिलाफ काम कर रहा है। क्या राफेल requ.js के अस्तित्व के परीक्षण के खराब तरीके का उपयोग कर रहा है? क्या IPython उपयोगकर्ता द्वारा प्रदान की गई जावास्क्रिप्ट पुस्तकालयों को लोड करते समय सीधे jQuery.getScript()
के बजाय require.js का उपयोग कर रहे हैं? या क्या कोई तरीका है क्योंकि उपयोगकर्ता को requ.js को गले लगाने की ज़रूरत है, जो मुझे किसी विशेष हैक्स की आवश्यकता के बिना Raphael
ऑब्जेक्ट देगी? (यदि अंतिम प्रश्न का उत्तर हाँ है, तो क्या कोई तरीका है कि मैं आईपीथॉन नोटबुक के पुराने संस्करणों का भी समर्थन कर सकता हूं, जो requ.js का उपयोग नहीं करते हैं?)
असल में, '$ .getScript()' के माध्यम से raphael.js को लोड करने के लिए भी 'संदर्भ त्रुटि: पूर्व परिभाषित नहीं किया गया है'। ऐसा लगता है कि राफेल वैश्विक नामस्थान में 'पूर्व संध्या' होने की उम्मीद कर रहे हैं, लेकिन यदि आवश्यक हो तो यह पूर्व संध्या (जिसे राफेल.जेएस का भी हिस्सा है) द्वारा रखा नहीं जाता है। –
तब मेरे पास कोई सुराग नहीं है। क्या यह शब्द 'आवश्यकता' वाले पृष्ठ में मैन्युअल रूप से लोड किया गया है? यदि ऐसा है तो जेएस का एक स्निपेट प्रकाशित करें जो इसे 'lib = 'kw का उपयोग करने के बजाय करता है। – Matt
मैंने 'आवश्यकता' के साथ लोड करने का प्रयास किया है, लेकिन कोई भाग्य नहीं है। वर्तमान आदेश जो मैं उपयोग कर रहा हूं (एक पंक्ति पर) 'जावास्क्रिप्ट ("require.config ({पथ: {राफेल:' https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min है .js '}}); की आवश्यकता है ([' राफेल '], फ़ंक्शन (रैफ) {window.Raphael = raph;}); ")' –