2012-11-13 16 views
28

निकाल दिया गया था, मैं एक जावास्क्रिप्ट स्क्रिप्ट लिख रहा हूं। यह स्क्रिप्ट शायद असीमित रूप से लोड हो जाएगी (एएमडी प्रारूप)।कैसे पता चलेगा कि विंडो "लोड" ईवेंट पहले से ही

इस स्क्रिप्ट में, मैं खिड़की के लोड होने तक कुछ भी महत्वपूर्ण नहीं करना चाहता। तो मैं विंडो "लोड" घटना को सुनता हूं।

लेकिन अगर स्क्रिप्ट विंडो के बाद लोड हो जाती है। लोड ईवेंट ... मैं विंडो कैसे जान सकता हूं। लोड पहले से ही निकाल दिया गया था?

और निश्चित रूप से मैं किसी भी अन्य लिपियों में कुछ जोड़ने के लिए नहीं करना चाहते हैं (वे सभी async लोड किए गए हैं, समस्या एक ही है) :)

संपादित करें:

कोई साथ एक HTML दस्तावेज़ कल्पना कीजिए इसमें जावास्क्रिप्ट बिल्कुल।

किसी को इस दस्तावेज़ में कोई टैग डालने की तुलना में, और यह स्क्रिप्ट टैग मेरी जावास्क्रिप्ट फ़ाइल लोड करता है।

यह मेरी स्क्रिप्ट निष्पादित करेगा।

यह स्क्रिप्ट कैसे जान सकती है कि window.load पहले ही निकाल दिया गया था?

कोई jQuery नहीं, मेरे पहले HTML दस्तावेज़ में कोई भी स्क्रिप्ट नहीं।

क्या यह जानना संभव है ??

मुझे window.document.readystate संपत्ति मिली। यह संपत्ति दस्तावेज़ "तैयार" घटना के लिए है, मैं खिड़की "लोड" के लिए नहीं। क्या विंडो "लोड" ईवेंट के लिए कुछ भी समान है?

+0

jQuery दस्तावेज़ तैयार घटना का उपयोग क्यों नहीं? अन्यथा, हुक window.load ईवेंट और एक झंडा सेट करें (उदा। 'Window.loadFired'), और प्रत्येक 50ms ध्वज को जांचने के लिए कतार टाइमआउट। –

+0

क्या आप बस एक विंडो लोड इवेंट में एक वैश्विक बूलियन सेट कर सकते हैं जो असीमित रूप से लोड नहीं होता है? – Aeoril

+0

मैं विंडो "लोड" ईवेंट का इंतजार करना चाहता हूं क्योंकि इस घटना से पहले, ब्राउज़र अभी भी व्यस्त है। जब ब्राउज़र वास्तव में तैयार होता है तो मैं काम करना शुरू करना चाहता हूं .... शायद यह बेवकूफ है, लेकिन फिर भी यह एक समस्या है कि यह जानने में सक्षम न हो कि कोई ईवेंट निकाल दिया गया था या नहीं ... है ना? – Nicolas

उत्तर

-3

window.load ओवरराइड करने के बारे में क्या?

window._load = window.load; 
window.load = function(){ 
    window.loaded = true; 
    window._load(); 
} 

तब के लिए

if (window.loaded != undefined && window.loaded == true){ 
    //do stuff 
} 
+2

यह काम नहीं करेगा। अगर खिड़की "लोड इवेंट पहले ही निकाल दिया गया था, तो विंडो ओवरलोडिंग बेकार है, इसे पहले से ही निष्पादित कर दिया गया है, यह अब और नहीं होगा ... – Nicolas

1

जाँच आप jQuery का उपयोग नहीं करना चाहते हैं, तर्क इसे इस्तेमाल करता है:

if(!document.body) 
    setTimeout(checkAgain, 1); 

तो विंडो के बीच घटना भरी हुई है और अगर जाँच दस्तावेज़ की बॉडी प्रॉपर्टी उपलब्ध है, आप जांच सकते हैं कि डोम तैयार है या नहीं

+2

दस्तावेज़। डोम तैयार होने पर उपलब्ध है। जब खिड़की" लोड "ट्रिगर नहीं होती है यह समाधान दस्तावेज़ "तैयार" (डीओएम तैयार) का पता लगाने के लिए है, लेकिन मैं विंडो "लोड" घटना का अनुमान लगाने के लिए prefere ... – Nicolas

2

मेरा उत्तर यहां है:

fiddle

window.addEventListener("load", function() { 
    window.loaded = true; 
}); 

function logLoaded() { 
    console.log("loaded"); 
} 

(function listen() { 
    if (window.loaded) { 
     logLoaded(); 
    } else { 
     console.log("notLoaded"); 
     window.setTimeout(listen, 50); 
    } 
})(); 

आप addEventListener के बारे में पढ़ सकते हैं() और उसके अनुकूलता here (यह ECMAScript 5 कल्पना करने के लिए नया है)। यह आगे बढ़ने वाली चीजों को करने का नया "पसंदीदा" तरीका है।

आप तुरंत आमंत्रित किए गए फ़ंक्शन एक्सप्रेशन (आईआईएफई) (वैकल्पिक रूप से, स्वयं-बुलाए गए अज्ञात फ़ंक्शंस या तुरंत अज्ञात फ़ंक्शंस का आह्वान) के बारे में पढ़ सकते हैं here

संपादित करें:

How to check if DOM is ready without a framework?

आप विशेष रूप से जानना चाहते हैं कि डोम लोड गतिविधि सक्रिय है चाहते हैं, एक डोम 'लोड' में एक वैश्विक चर सेट ईवेंट हैंडलर: यहाँ एक अच्छा जवाब StackOverflow पर पहले से ही है और फिर जब आपका नया कोड लोड होता है तो उसके अस्तित्व की जांच करें।

// in 'load' event handler 
window.domLoadEventFired = true; 

// in code you are loading asynchronously 
if (typeof window.domLoadEventFired !== undefined) { 
    // ... 
} 
+1

इस समाधान के लिए काम करने के लिए, हमारे पास विंडो "लोड" घटना से पहले कुछ कोड निष्पादित होना चाहिए। यहां तक ​​कि यदि यह छोटा है, तो भी इस स्क्रिप्ट को सिंक्रनाइज़ रूप से लोड किया जाना चाहिए (या सीधे HTML दस्तावेज़ में लिखा गया है), या आप सुनिश्चित नहीं हो सकते कि इसे विंडो "लोड" से पहले निष्पादित किया गया है .... क्या मैं गलत हूं? – Nicolas

+0

आप सही हैं। हालांकि, इस समय, किसी भी अन्य तरीके के बारे में सोचें। अगर आप दस्तावेज़! किसी चीज़ से निपट सकते हैं, तो इसकी आवश्यकता नहीं हो सकती है, लेकिन मुझे सच में यकीन नहीं है कि यह लोड इवेंट – Aeoril

+0

की फायरिंग से कैसे संबंधित है कोई सिंक्रोनस कोड के लिए क्या आवश्यकता है? @ निकोलस – Aeoril

29

सबसे आसान समाधान हो सकता है document.readyState == 'complete' के लिए जाँच हो, देखना http://www.w3schools.com/jsref/prop_doc_readystate.asp

+8

एमडीएन https://developer.mozilla.org/en-US/docs/Web/API से वही समाधान/दस्तावेज/readyState # मान – lizlux

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

  • कोई संबंधित समस्या नहीं^_^