2009-05-22 22 views
12

मेरे पास एक स्क्रिप्ट है जो किसी अन्य स्क्रिप्ट के माध्यम से गतिशील रूप से डाली जा रही है। उस स्क्रिप्ट में कोड $(window).load() ईवेंट के अंदर लपेटा गया है क्योंकि इसे पृष्ठ पर मौजूद सभी छवियों को लोड करने की आवश्यकता है। कुछ ब्राउज़रों में यह ठीक काम करता है, लेकिन दूसरों में ऐसा लगता है कि कोड नहीं चल रहा है क्योंकि कोड चलने के समय तक लोड हो चुका है।

क्या यह जांचने और देखने का कोई तरीका है कि पृष्ठ लोड हो चुका है या नहीं - या तो jQuery या जावास्क्रिप्ट के माध्यम से? (छवियों सहित)

इस स्थिति में, मेरे पास मूल दस्तावेज़ की onload घटना तक पहुंच नहीं है (इसे लोड स्क्रिप्ट के माध्यम से बदलने से अलग - लेकिन यह वही समस्या पेश करने लगती है)।

किसी भी विचार/समाधान/सलाह की सराहना की जाएगी!

उत्तर

7

आप एक हैंडलर एक टाइमआउट कि होगा के माध्यम से लागू किया जाता है कि स्थापित करने की कोशिश कर सकते यह देखने के लिए छवियों की जांच करें कि उनकी संपत्तियां उपलब्ध हैं या नहीं। load इवेंट हैंडलर में टाइमर साफ़ करें ताकि लोड ईवेंट पहले होता है, टाइमर आग नहीं लगेगा। यदि गुण उपलब्ध नहीं हैं, तो लोड ईवेंट अभी तक नहीं निकाल दिया गया है और आप जानते हैं कि आपके हैंडलर को अंततः बुलाया जाएगा। यदि वे हैं, तो आप जानते हैं कि आपके हैंडलर सेट होने से पहले लोड ईवेंट हुआ था और आप बस आगे बढ़ सकते हैं।

स्यूडोकोड

var timer = null; 
$(function() { 
    $(window).load(function() { 
     if (timer) { 
      clearTimeout(timer); 
      timer = null; 
     } 
     process(); 
    }); 
    timer = setTimeout(function() { 
     if (checkAvailable()) 
      process(); 
     } 
    }, 10*1000); // waits 10 seconds before checking 
}); 

function checkAvailable() 
{ 
    var available = true; 
    $('img').each(function() { 
     try { 
      if (this.height == 0) { 
       available = false; 
       return false; 
      } 
     } 
     catch (e) { 
      available = false; 
      return false; 
     } 
     }); 
     return available; 
    } 

    function process() { 
     ... do the real work here 
    } 
+0

यह बहुत कुछ पूरा करता है जो मैं करना चाहता था। बस 10 सेकंड इंतजार करने के बजाए छोटे अंतराल पर टाइमर को आग लगाने के लिए थोड़ा सा tweaked। धन्यवाद! – DismissedAsDrone

2

मुझे लगता है कि अगर आप $ (दस्तावेज़) का उपयोग करेंगे ($)। $ - $ jquery documentation देखें। यदि यह है कि क्या आप के बाद कर रहे हैं

+0

बस किसी लिंक किए गए डॉक्स से स्निपेट: संक्षेप में, यह window.onload का उपयोग करने के लिए एक ठोस प्रतिस्थापन है ... आपके बाध्य फ़ंक्शन को तत्काल वें कहा जाएगा ई डोम पढ़ने और छेड़छाड़ करने के लिए तैयार है, जो तब होता है जब सभी जावास्क्रिप्ट कोड के 99.99% को चलाने की आवश्यकता होती है। – TML

+5

$ (दस्तावेज़)। डीओएम जगह पर पहले से ही आग लगती है लेकिन छवियों को लोड करने के लिए इंतजार नहीं करती है (अगर मुझे गलत नहीं है)। इस मामले में, मुझे लोड होने वाली छवियों की आवश्यकता है ताकि मैं उनके गुण पढ़ सकूं। – DismissedAsDrone

+1

आप छवियों को लोड किए बिना विशेषताओं को पढ़ सकते हैं ... – trusktr

5

मुझे लगता है कि कुछ काम का हो सकता है एक प्लगइन लिखा है: http://plugins.jquery.com/project/window-loaded

+0

कूल! तो यह काम करता है अगर मैं सामग्री प्राप्त करने के लिए .load() का उपयोग करता हूं, और यदि छवियों को लोड करने की आवश्यकता होती है, तो '$। विन्डोलोडेड (/ * dostuff * /)' कॉलबैक निष्पादित करेगा नई छवियों को लोड किया जाएगा ??? – trusktr

+0

मैंने window.onload में फ़ंक्शंस जोड़ने के लिए addEventListener का उपयोग करके समस्या हल की है और प्रत्येक कॉल के लिए jquery's .load() विधि को एक चर को सही करने के लिए सेट किया गया है, इसलिए इसे window.onload में बाद के जोड़ों में पाया जा सकता है ... अगर इससे बनाता है कोई समझ ... – trusktr

+0

लिंक अब टूटा हुआ है, यह http://jquery.com/ :(पर रीडायरेक्ट करता है – Septagram

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

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