2010-12-13 18 views
7

मैंने एक जावास्क्रिप्ट विजेट बनाया है जो किसी भी पर्यावरण में किसी तीसरे पक्ष की साइट पर एम्बेड करने योग्य होना चाहिए। विजेट jQuery और jQuery यूआई पर निर्भर करता है। मैंने jQuery को एम्बेड करने के लिए महान काम करने के लिए How to embed Javascript widget that depends on jQuery into an unknown environment में चरणों का पालन किया - jQuery को एम्बेड करने के लिए बहुत अच्छा काम करता है। लेकिन जब मैं jQuery यूआई जोड़ने की कोशिश करता हूं, तो यह विफल हो जाता है। कोड यह रहा:jQuery यूआई jQuery क्यों नहीं देखता है?

(function(window, document, version, callback) { 
    var j, d; 
    var loaded = false; 
    if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"; 
    script.onload = script.onreadystatechange = function() { 
     if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) { 
      callback((j = window.jQuery).noConflict(1), loaded = true); 
      j(script).remove(); 
     } 
    }; 
    document.documentElement.childNodes[0].appendChild(script) 
    } 
})(window, document, "1.3.2", function($, jquery_loaded) { 
    $.getScript('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js', function(){ 
     console.log('loaded'); 
    }); 
}); 

जब मैं इस चलाने के लिए, मैं 'लोड' mesage करते हुए कहा कि "$ अपरिभाषित है" jQuery-ui.js की लाइन 15 पर एक त्रुटि के बाद मिलता है। लेकिन जब मैं jQuery UI लोड करने के लिए $ .getScript() का उपयोग कर रहा हूं तो $ को अपरिभाषित कैसे किया जा सकता है? और मुझे त्रुटि मिलने से पहले संदेश 'लोड' क्यों दिखाई देता है? JQuery प्रलेखन के अनुसार, स्क्रिप्ट को लोड और निष्पादित होने तक getScript को कॉलबैक निष्पादित नहीं करना चाहिए।

क्या कोई तरीका है कि मैं jQuery फ्रेम को शामिल करने के लिए इस ढांचे का उपयोग कर सकता हूं, या क्या मुझे सब कुछ लोड करने, निर्भरता लागू करने आदि के लिए आवश्यकताजेएस जैसे स्क्रिप्ट लोडर का उपयोग करने की आवश्यकता है?

उत्तर

7

.noConflict(1) पर कॉल करके, .noConflict(true) के समान, आप jQuery को हटा रहे हैं, बस 1 हटा दें। true.noConflict() पर तर्क केवल $ को हटाने के लिए jQuery को बताता है, लेकिन window.jQuery, जो jQuery UI बाद में उपयोग करने का प्रयास कर रहा है, जब भार।

You can test it here, देखें कंसोल में कोई त्रुटि नहीं है।

+0

बाह! वह यह था। एफएफ/क्रोम/सफारी में अच्छी तरह से लोड हो रहा है। – venutip

+0

+1 सही होने के लिए :) – alex

+0

+ निक क्रेवर होने के लिए। –

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