22

आशा किसी को पुन: लोड करने से पहले इस के लिए एक अच्छा जवाब है बाध्य घटनाओं से चलाता है? ध्यान दें कि नया पृष्ठ लोड होने पर क्या होता है, लेकिन इससे पहले लोड होने से मैं बात नहीं कर रहा हूं। निम्नलिखित कोड देखें:पृष्ठ पुनः लोड अनावश्यक रूप से सिर्फ पेज

<form name="form1" method="post" action="tmp.aspx?a=1" id="form1"> 
<script type="text/javascript"> 

    $(document).ready(function() { console.log('document/ready' + new Date()); }); 

    $(window).load(function() { console.log('window/load' + new Date()); }); 

</script> 

<a href="tmp.aspx?a=1">tmp</a> 
</form> 

जब मैं पहली बार यात्रा पेज मैं कंसोल पर दो आउटपुट, दस्तावेज़/तैयार के लिए एक और खिड़की/लोड के लिए एक हो। जब मैं पृष्ठ को दोबारा रीफ्रेश करता हूं तो तेज़ी से आउटपुट होता है, और तुरंत दो और (नए पृष्ठ दृश्य से) के बाद। अगर मैं इसके बजाय लिंक (tmp.aspx) पर क्लिक करता हूं जो सीधे उसी पृष्ठ पर जाता है, ऐसा नहीं होता है।

मुझे यकीन है कि इसके लिए एक अच्छी व्याख्या है।

सम्मान!

संपादित करें: $ (दस्तावेज़) .ready() और $ (विंडो) .load() को अतिरिक्त कॉल रीफ्रेश किए जाने से पहले किए गए हैं। तो जब मैं पहली बार पृष्ठ लोड करता हूं तो उन्हें एक बार बुलाया जाता है, फिर मैंने रीफ्रेश किया और पृष्ठ को फिर से लोड करने से पहले विधियों को फिर से बुलाया जाता है। उसके बाद, जब पृष्ठ को फिर से लोड किया गया है, तो विधियों को THIRD समय कहा जाता है।

+0

क्या यह एक आईफ्रेम है? coz मैं लगता है कि मैं एक ही व्यवहार देखा लेकिन फेसबुक के – Achshar

+0

तरह विजेट्स के लिए भी बस चर को खत्म करने की आप jQuery के बिना इस कोशिश कर सकते हैं है? शायद jquery इसके साथ गड़बड़ कर रहा है .. शरीर के लिए शुद्ध जावास्क्रिप्ट में एक घटना श्रोता जोड़ें। इससे समस्या क्षेत्र को कम करना चाहिए। – Achshar

+0

मुझे यह समस्या भी हो रही है - बहुत परेशान। मैं भी पाते हैं कि हैश-परिवर्तन की घटनाओं document.ready कारण अनावश्यक रूप से भी – asgeo1

उत्तर

7

व्यवहार 14.0.835.202 को मनाया गया। संपादित करें: (विंडोज सात x64 पर)

यह jquery गलती नहीं है: DOMContentLoaded को पेज अनलोड से ठीक पहले एक बार निकाल दिया जाता है।

सरल परीक्षण इस जांच करने के लिए:

page loaded 
page loaded // should not be here and is not on Firefox. 
page unloaded 
loaded 

अपने कंसोल में (दृढ़ता के साथ पर) मुझे लगता है कि यह सिर्फ एक क्रोम बग है

:

function startpage() { 
    console.log('page loaded'); 
    } 

    function unloadPage(){ 
     console.log("page unloaded"); 
    } 
document.addEventListener("DOMContentLoaded", startpage, false); 
window.onbeforeunload = unloadPage; 

आप एक ताज़ा के बाद देखना चाहिए । एक कंसोल नहीं है, क्योंकि टाइमस्टैम्पिंग साबित करता है कि यह डुप्लिकेट नहीं है।

संपादित करें: एक ही क्रोम संस्करण लेकिन चल OSX ठीक लगता है (नीचे टिप्पणी देखें)। यह पुष्टि करता है कि यह एक बग है।

+1

'OSX 10.6.7' पर' क्रोम 14.0.835.202' पर परीक्षण किया गया और बग पुन: बनाने नहीं कर सका। लॉग अपेक्षित के रूप में पढ़ता है, 'पृष्ठ लोड किया गया; पृष्ठ अनलोड किया गया; 'प्रत्येक अनुरोध चक्र के लिए। –

+0

आपके इनपुट के लिए धन्यवाद! तो ओएसएक्स संस्करण ठीक लगता है। मैंने अपने ओएस का जिक्र नहीं किया: मेरा परीक्षण विंडोज सात x64 पर था। जब मैं कुछ समय लेता हूं तो मैं विंडोज एक्सपी (x86) पर परीक्षण चलाऊंगा। – mddw

+1

मुद्दे पर OSX होती है - कि मैं क्या – asgeo1

2

जहाँ तक मुझे पता है, (के साथ या बिना #xxx या, एक ही पृष्ठ के लिए लिंक) एक #xxx लिंक पर क्लिक window.load और document.ready घटनाओं ट्रिगर नहीं करता।

आप घटना ट्रिगर के लिए लिंक चाहते हैं,

$('a#xxx').click(function(){ 
    //Your code here 
} 

की तरह कुछ जहां xxx लिंक की आईडी है।

लिंक पृष्ठ पुनः लोड करने के लिए था, तो क्लिक करें ईवेंट हैंडलर में

window.location.reload() 

का उपयोग करें।

+0

मैं नहीं चाहता कि अतिरिक्त कॉल हो। अतिरिक्त कॉल समस्याएं हैं और मैंने जो लिंक जोड़ा है वह यह देखने के लिए था कि क्या लिंक पर क्रूर कॉल भी किए गए थे या नहीं। (वे नहीं हैं) – Sten

3

मैक के लिए क्रोम 13 में मैं इस व्यवहार को नहीं देख रहा हूं। पृष्ठ को पहली बार लोड करने के बाद, और रीफ्रेश करने से पहले, क्या आप कंसोल को साफ़ करते हैं? क्या आपको पुराना कंसोल आउटपुट देखने का मौका है (मुझे पता है कि कुछ ब्राउज़र पिछले पृष्ठ के कंसोल आउटपुट को चारों ओर रखना चाहते हैं)?

मैं उन दो घटनाओं को रीफ्रेश पर दो बार निकालने की उम्मीद नहीं करता, इसलिए मेरा अनुमान स्टाइल कंसोल होगा, या तो डिज़ाइन द्वारा क्योंकि यह मैन्युअल रीफ्रेश था या शायद क्रोम 14 में उनके देव कंसोल के साथ बग है।

+0

मैंने कंसोल आउटपुट की गलतफहमी को रद्द करने के लिए अभी एक अतिरिक्त परीक्षण किया है। मैं एक यादृच्छिक संख्या है कि मैं उत्पादन में शामिल बनाया है, और परीक्षण के लिए यकीन है कि पता चलता है कि पहले 4 आउटपुट पृष्ठ के प्रारंभिक लोड से हैं और फिर बस पेज से पहले पुनः लोड कर दिया गया है (जब मैं ताज़ा करें बटन जारी)। इसलिए रीलोड के बाद पेज छोड़ते समय विधियों को बुलाया जाता है। – Sten

2

मैंने विंडोज़ पर क्रोमियम 14 पर इसका परीक्षण किया है। व्यवहार मनाया नहीं जाता है।

2

यह एक क्रोम/वेबकिट डेवलपर कंसोल बग की तरह लगता है। उबंटू पर क्रोम 14 का उपयोग करके मैं अगले चरणों का पालन करके बग को पुन: उत्पन्न कर सकता हूं।

पहले संदेश कंसोल खोलें और देखो 0 "कई बार लोड करने के लिए"

  • प्रेस F12 निम्नलिखित js कोड

    var timesLoaded = 0; 
    
    function loadHandler() { 
        console.log(timesLoaded, "times loaded"); 
        timesLoaded++; 
    } 
    
    function unloadHandler(){ 
        console.log("unload after ", timesLoaded, " loads"); 
    } 
    
    $(document).ready(loadHandler); 
    $(window).unload(unloadHandler); 
    
    1. ओपन गूगल क्रोम के साथ पेज युक्त
    2. जोड़ें एक पृष्ठ बनाने के unloadHandler समारोह
    3. की पहली पंक्ति पर एक ब्रेकपाइंट डबल संदेश देखने के लिए दिखाई आप पृष्ठ पर कहीं क्लिक करना चाहिए
    4. आप शायद देखेंगे पेज
    5. रिफ्रेश (कंसोल से बाहर और लोड पृष्ठ के लिए ध्यान देने की तरह) 0 "कई बार भरी हुई" संदेश फिर

    महत्वपूर्ण बात यह है कि अपने कोड नहीं है दो बार निष्पादित यह सिर्फ कुछ कारणों से वेबकिट देव कंसोल एक ही संदेश को फिर से प्रदर्शित करता है। आगे बग आप निम्नलिखित कर सकते हैं,

    1. लोड पिछले html पृष्ठ
    2. अनलोड ब्रेकप्वाइंट फिर से जांच करने के लिए जोड़े
    3. कंसोल पर राइट क्लिक करें (सिर्फ यकीन है कि पेज वास्तव में ताज़ा नहीं होगा होने के लिए) तत्व का निरीक्षण पहली प्रविष्टि (0 "कई बार लोड")
    4. क्लिक करें
    5. तत्व प्रविष्टि के अंतर्गत आता है का पता लगाएँ (यह एक div.console-समूह-संदेश होना चाहिए (हाँ सांत्वना सिर्फ एक HTML/JS अनुप्रयोग है) तत्व
    6. सही तत्व पर क्लिक करें और सबट्री संशोधन
    7. पर तोड़ पर क्लिक करें (पेज को रिफ्रेश फिर unfocus कंसोल विंडो को एचटीएमएल पृष्ठ पर कहीं क्लिक करने के बाद
    8. बस से पहले दूसरी कष्टप्रद संदेश प्रकट होता है डीबगर कंसोल कोड को दिखाएगा जो संदेश को जोड़ने की कोशिश करता है।
  • 2

    क्रोम 15.0.874 का उपयोग करके परीक्षण पर कुछ नोट्स जोड़ने के लिए।102 और विंडोज 7 86:

    यह स्क्रिप्ट मैं सवाल की मेरी समझ से परीक्षण के लिए प्रयोग किया जाता है:

    <html> 
        <head> 
         <script language="javascript"> 
          var r = Math.floor(Math.random() * 101); 
    
          function reloadLink() { 
           console.log('----Reload Link----'); 
          } 
    
          function startpage() { 
           console.log('---Loaded. ID: ' + r + ' Time: '+new Date()); 
          } 
    
          function unloadPage() { 
           console.log('Un-loaded. ID: ' + r + ' Time: '+new Date()); 
          } 
    
          document.addEventListener("DOMContentLoaded", startpage, false); 
          window.onbeforeunload = unloadPage; 
    
         </script> 
         <title>Testing Chrome</title> 
        </head> 
        <body> 
         <a href="" onclick="reloadLink();">Reload Page</a> 
        </body> 
    </html> 
    

    निम्नलिखित एक संचयी लॉग है, प्रत्येक नए इसके अलावा बोल्ड अक्षरों में हाइलाइट:

  • प्रारंभिक पृष्ठ लोड पर मुझे मिलता है:
  • --- लोड किया गया। ID: 68 समय: मंगल अक्टू 25 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट समय)

  • F5 दबा जबकि HTML पृष्ठ पर ध्यान केंद्रित:
  • --- लोड हो गया। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम) < -----
    अन-लोड। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:36:12 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। ID: 78 समय: मंगल अक्टू 25 2011 21:36:12 GMT + 0100 (जीएमटी डेलाइट समय)

  • पृष्ठ पुनः लोड करने HTML पृष्ठ पर लिंक दबाने:
  • --- लोडेड । आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम)
    अन-लोडेड। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:36:12 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 78 समय: मंगलवार 25 अक्टूबर 2011 21:36:12 जीएमटी +0100 (जीएमटी डेलाइट टाइम)

    ---- लिंक पुनः लोड करें ----
    अन लोड हो गया। आईडी: 78 समय: मंगलवार 25 अक्टूबर 2011 21:38:25 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। ID: 22 समय: मंगल अक्टू 25 2011 21:38:25 GMT + 0100 (जीएमटी डेलाइट समय)

  • दबाने F5 जबकि सांत्वना पर ध्यान केंद्रित:
  • --- लोड हो गया। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:35:18 GMT + 0100 (जीएमटी डेलाइट टाइम)
    अन-लोडेड। आईडी: 68 समय: मंगलवार 25 अक्टूबर 2011 21:36:12 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 78 समय: मंगलवार 25 अक्टूबर 2011 21:36:12 GMT + 0100 (जीएमटी डेलाइट टाइम)
    ---- लिंक पुनः लोड करें ----
    अन लोड हो गया। आईडी: 78 समय: मंगलवार 25 अक्टूबर 2011 21:38:25 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया। आईडी: 22 समय: मंगलवार 25 अक्टूबर 2011 21:38:25 GMT + 0100 (जीएमटी डेलाइट टाइम)

    अन-लोड। आईडी: 22 समय: मंगलवार 25 अक्टूबर 2011 21:41:53 GMT + 0100 (जीएमटी डेलाइट टाइम)
    --- लोड किया गया।ID: 15 समय: मंगल अक्टू 25 2011 21:41:54 GMT + 0100 (जीएमटी डेलाइट समय)

    आप विसंगति को देखने के केवल तब होता है जब सीधे पेज पुन: लोड कर सकते हैं (मैं एक तीर के साथ विसंगति पर प्रकाश डाला है), जबकि पृष्ठ पर ही ध्यान केंद्रित किया। इसके अलावा
    , यदि आप दोनों आईडी और विसंगति का टाइमस्टैम्प नोटिस वे F5 से टकराने से पहले कई सेकंड प्रतीक्षा करने के बाद भी एक ही हैं - तो यह प्रतीत होता है कोड तो बात करने के लिए एक दूसरी बार के लिए नहीं चल रहा है, लेकिन सांत्वना है किसी कारण से एक प्रतिलिपि लॉगिंग।


    निष्कर्ष पर आगे जोड़ना: कंसोल के लिए लिखने के लिए

    आप समय टैब का चयन करें, और दोनों एक प्रारंभिक पृष्ठ लोड, और एक F5 पुनः लोड रिकॉर्ड हैं, तो आप दो कार्य देखेंगे ही कर रहे हैं एक बार चलाने के लिए, आगे समझौता यह chrome में कंसोल पर एक संभावित त्रुटि दिखाई देता है:

    Screenshot Show Image - Timeline 1 (initial load) Screenshot Show Image - Timeline 2 (F5 reload)

    +0

    धन्यवाद दोस्त का उपयोग कर रहा है। इस मुद्दे के कुछ और अच्छे स्पष्टीकरण थे, लेकिन चूंकि मुझे एक चुनना है, यह सबसे विस्तृत स्पष्टीकरण था इसलिए इसे प्राप्त होता है। चियर्स – asgeo1

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