2010-09-08 15 views
17

क्या कोई मुझे document.readyState और "DOMContentLoaded" की "इंटरैक्टिव" स्थिति के बीच अंतर बता सकता है?document.readystate "इंटरैक्टिव" बनाम ondomcontentloaded?

मुझे "इंटरैक्टिव" स्थिति पर बहुत सारी जानकारी नहीं मिली और पेज में उपयोग करने के लिए विशेष रूप से क्या उपलब्ध है।

This page का कहना है:

इंटरैक्टिव - पर्याप्त भरी हुई है और उपयोगकर्ता इसे

कौन सा DOMContentLoaded घटना की तरह एक helluva बहुत लगता है के साथ बातचीत कर सकते हैं।

मैंने quick test page here लिखा जो ऐसा लगता है कि इंटरैक्टिव तैयारस्टेट DOMContentLoaded ईवेंट से पहले उपलब्ध प्रतीत होता है।

तो किसी को स्पष्ट कर सकते हैं या मुझे क्या उपलब्ध इंटरैक्टिव राज्य में पृष्ठ पर चालाकी करने पर कुछ जानकारी देने के लिए और क्या यह DOMContentLoaded रूप में ही है और यदि हां, तो क्यों यह DOMContentLoaded से पहले उपलब्ध है?

:)

चीयर्स, Yansky।

संपादित करें: जोड़ने के लिए भूल गए, आपको नई तैयारस्टेट सुविधा का उपयोग/देखने में सक्षम होने के लिए FF4b चलाने की आवश्यकता है।

उत्तर

4

बस अपने स्वयं के प्रश्न का उत्तर देने के लिए, ऐसा लगता है कि DOMContentLoaded घटना document.interactive तैयार करने के लिए समान है।

+1

क्या आपके पास इस जानकारी का स्रोत है? –

+0

@ एडम हीथ - बिल्कुल नहीं। मैं मोज़िला #extdev आईआरसी चैनल पर एक ही सवाल पूछ रहा था और वहां एक मोड में कहा गया था कि यह एक ही समय में होता है। यहाँ mozilla irc चैनल विवरण है: https://wiki.mozilla.org/IRC#Commonly_Used_Mozilla_IRC_Channels – Yansky

+2

यह काफी सही नहीं है। एचटीएमएल 5 चश्मा के अनुसार, इंटरैक्टिव और DOMContentLoaded के बीच स्क्रिप्ट को निष्पादित किया जाना है। उस ने कहा कि यदि आप 'डिफर' का उपयोग नहीं करते हैं, तो वे समकक्ष होने के करीब हैं: उस DOMContentLoaded 'इंटरैक्टिव' स्थिति का पालन करेगा, इसके बिना कुछ भी करने के लिए जो अन्य स्क्रिप्ट या दस्तावेज़ को प्रभावित करेगा। – hexalys

13

एक बार प्रयोक्ता एजेंट दस्तावेज़ पार्स करने बंद हो जाता है, उपयोगकर्ता एजेंट के लिए निम्न चरण चलाना चाहिए:

  1. वर्तमान दस्तावेज़ तत्परता सेट करने के लिए "इंटरैक्टिव" और अपरिभाषित के लिए सम्मिलन बिंदु।

  2. खुले तत्वों के ढेर से सभी नोड्स पॉप करें।

    एक:

  3. तो स्क्रिप्ट जब दस्तावेज़ पार्स समाप्त हो गया है निष्पादित करेंगे कि की सूची खाली नहीं है, इन substeps चलाते हैं। स्क्रिप्ट की सूची में पहली स्क्रिप्ट तक ईवेंट लूप को स्पिन करें जो दस्तावेज़ समाप्त होने पर निष्पादित होगा जब "पार्सर-निष्पादित होने के लिए तैयार" ध्वज सेट और पार्सर के दस्तावेज़ में कोई स्टाइल शीट नहीं है जो स्क्रिप्ट को अवरुद्ध कर रही है।

    बी। स्क्रिप्ट की सूची में पहली स्क्रिप्ट निष्पादित करें जो दस्तावेज़ को पार्सिंग समाप्त होने पर निष्पादित करेगा।

    सी। स्क्रिप्ट की सूची से पहला स्क्रिप्ट तत्व निकालें जो दस्तावेज़ निष्पादित होने पर निष्पादित होगा (यानी सूची में पहली प्रविष्टि को स्थानांतरित करें)।

    डी।स्क्रिप्ट की सूची जब दस्तावेज़ पार्स समाप्त हो गया है निष्पादित करेंगे कि अभी भी खाली नहीं है, तो substep एक से फिर से इन substeps दोहराएँ।

  4. दस्तावेज़ पर DOMContentLoaded नामक बुलबुले एक साधारण घटना को आग लगाने के लिए एक कार्य को कतार दें। । । । http://dev.w3.org/html5/spec/the-end.html#the-end

+2

संक्षेप में इसका अर्थ क्या है: 1. जावाकैंक जो पार्सिंग के बाद सही चलाना आवश्यक है "सूची-की-स्क्रिप्ट्स-द-विल-निष्पादित-जब-दस्तावेज़-समाप्त-समाप्त-पार्सिंग" को निष्पादित किया जाता है 2 । DOMContentLoaded घटना आग 3. JavaScripts "सूची के- लिपियों-कि-होगा-निष्पादित में आदेश के रूप में जल्द ही के रूप में संभव" 4. readyState परिवर्तन क्रियान्वित कर रहे हैं करने के लिए "पूर्ण" (के बजाय "इंटरेक्टिव") और "ऑनलोड" शुरूआत घटना शुरू कर दिया। –

+0

मुझे लगता है कि "सूची के- लिपियों-कि-होगा-निष्पादित-जब-दस्तावेज़ है-समाप्त-पार्स करने" जावास्क्रिप्ट जो "दस्तावेज़.लिखें" कि "इंटरेक्टिव" readyState के दौरान चलाने किया जाना चाहिए का उपयोग करता है को दर्शाता है। तो डोम पार्स करने और उन अवरुद्ध JavaScripts चल लेने के बाद समय अंतराल के पहले "DOMContentLoaded" –

+1

यानिव, बस तकनीकी रूप से सही होने के लिए आपको दस्तावेज़.लिखें स्क्रिप्ट 'इंटरैक्टिव' राज्य पर नहीं चलाना चाहिए है। दस्तावेज़ पहले ही पार्स किया जा रहा है या पार्सिंग कर रहा है ... अनुक्रम इस प्रकार है: 'इंटरैक्टिव' स्थिति> रन 'डिफर्स' स्क्रिप्ट और शेष अवरुद्ध स्क्रिप्ट> DOMContentLoaded> शेष 'async' स्क्रिप्ट> 'पूर्ण' चलाएं। हालांकि आप क्या कर सकते हैं, 'इंटरैक्टिव' पर document.write फ़ंक्शन को ओवरराइड करें ताकि यदि कोई async स्क्रिप्ट दस्तावेज़.write का उपयोग करती है, तो आप अन्य विधियों का उपयोग करके इसका सामना कर सकते हैं। यह भी ध्यान में रखते हुए कि 'इंटरैक्टिव' राज्य IE में ठीक से काम नहीं कर रहा है (उदाहरण के लिए बहुत जल्दी फायरिंग)। – hexalys

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