स्क्रिप्ट टैग पर ऑनलोड घटना को आग लगाने की कोशिश करना


100

मैं स्क्रिप्ट के एक सेट को क्रम में लोड करने की कोशिश कर रहा हूं, लेकिन ऑनलोड घटना मेरे लिए फायरिंग नहीं है।

    var scripts = [
        '//cdnjs.cloudflare.com/ajax/libs/less.js/1.3.3/less.min.js',
        '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js',
        MK.host+'/templates/templates.js'
    ];

    function loadScripts(scripts){
        var script = scripts.shift();
        var el = document.createElement('script');
        el.src = script;
        el.onload = function(script){
            console.log(script + ' loaded!');
            if (scripts.length) {
                loadScripts(scripts);
            }
            else {
                console.log('run app');
                MK.init();
            }
        };

        $body.append(el);
    }

    loadScripts(scripts);

मुझे लगता है कि जब jQuery का उपयोग DOM के लिए तत्व को जोड़ने के लिए किया जाता है, तो el.onload जैसी मूल घटनाओं का अनुमान नहीं है। अगर मैं मूल का उपयोग करता हूं document.body.appendChild(el)तो यह अपेक्षित रूप से आग लगाता है।


यात्रा: thi लिंक: stackoverflow.com/questions/4845762/… यह ईंधन का उपयोग है
Jitesh

जवाबों:


143

आप स्थापित करना चाहिए srcविशेषता के बादonload घटना, f.ex:

el.onload = function() { //...
el.src = script;

ईवेंट संलग्न करने से पहले आपको स्क्रिप्ट को DOM में जोड़ना चाहिए onload:

$body.append(el);
el.onload = function() { //...
el.src = script;

याद रखें कि आपको readystateIE समर्थन की जांच करने की आवश्यकता है । यदि आप jQuery का उपयोग कर रहे हैं, तो आप इस getScript()विधि को भी आज़मा सकते हैं : http://api.jquery.com/jQuery.getScript/


11
वास्तव में यह तय नहीं करता है। लेकिन अगर मैं सिर्फ document.body.appendChild(el)$ ('शरीर') के बजाय उपयोग करता हूं । फिर उम्मीद के मुताबिक ऑनलोड इवेंट में आग लग जाती है।
चॉवी

34
क्या आप मुझे यह समझने में मदद कर सकते हैं कि आदेश क्यों महत्वपूर्ण है?
चॉवी

12
@David HTML5rocks.com/en/tutorials/speed/script-loading जैसी जगहों पर सुझाए गए तत्व को अंतिम रूप से क्यों नहीं जोड़ा गया ? आपको उस आदेश श्रोता को जोड़ना चाहिए और srcअप्रासंगिक में सेट करना चाहिए ।
स्टुअर्ट पी। बेंटले

3
मैं जिज्ञासु हूं: किसी तत्व को onloadऔर srcविशेषताओं को सेट करने से पहले DOM में किसी तत्व को जोड़ना क्यों महत्वपूर्ण है ?
जेक विल्सन

1
यदि स्क्रिप्ट कैश्ड है, तो जैसे ही आप src जोड़ते हैं आइटम लोड हो जाता है और ऑनलोड फायर नहीं होता है। Src से पहले ऑनलोड जोड़ना यह सुनिश्चित करेगा कि कैश्ड स्क्रिप्ट के लिए ऑनलोड आग।
जॉनशिपमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.