यह प्रश्न अजीब लग सकता है, क्योंकि अधिकांश समय पॉपस्टेट को सिंक्रनाइज़ किया जाता है क्योंकि उपयोगकर्ता बैक बटन दबाते हैं।जब ब्राउज़र पॉपस्टेट ईवेंट को फायर नहीं कर रहा है तो बैक बटन को कैसे संभालें
हालांकि, डब्ल्यू 3 सी स्पेक बताता है कि traversing history (आइटम 14 देखें), यानी एक UA (ब्राउज़र) को पॉपस्टेट कतार में जाने की अनुमति है। popstate
को असीमित रूप से निकाल दिया गया है (भले ही यूआरएल इस बिंदु पर बदल गया हो)।
ब्राउज़र विक्रेता इस स्पेक को अलग-अलग समझते हैं और कार्यान्वित करते हैं। Mozilla decides फ़ायरफ़ॉक्स popstate
load
से पहले, और अच्छे कारणों से आग लगने में सक्षम होना चाहिए, ताकि धीमी छवियां popstate
को अवरुद्ध न करें।
क्रोम/सफारी अन्यथा का फैसला करता है, और यह हमारी समस्या की ओर जाता है:
जब एक वेब अनुप्रयोग के लिए इतिहास को प्रबंधित करने, यह जितनी जल्दी हो सके, जैसे के रूप में इतिहास प्रबंधन शुरू करने के लिए अक्सर वांछनीय है। load
के बजाय DOMContentLoaded
पर। लेकिन बदले में, उपयोगकर्ता pushState
से वापस नहीं आ पाए हैं, क्योंकि सभी popstate
load
तक कतारबद्ध हैं।
हम इस तरह के परिदृश्य को संभालने के तरीकों के लिए सलाह मांग रहे हैं। मैं कुछ खुद के साथ आया हूं:
- Lazyload छवियों, इसलिए
load
ASAP को आग लग सकता है। load
तक ब्लॉक यूआई निकाल दिया गया है।load
परDOMContentLoaded
के बजाय इनिट फ्रेमवर्क।
क्या बेहतर समाधान हैं?
अद्यतन: चीजें बदसूरत मिलती है, जब वहाँ ajax हैं load
पहले कि आग, अगर डोम परिवर्तन, और डोम परिवर्तन में उन लोगों के अनुरोध परिणाम कुछ छवियों के लिए होता है, load
जब तक उन छवियों को लोड किए गए हैं/समय समाप्ति देरी हो रही है, popstate
अर्थ अब तक के लिए कतारबद्ध है।
अद्यतन 2: इसके लिए एक सरल डेमो जोड़ने के लिए, इस jsbin page क्रोम के साथ जाएं और popstate
अवरुद्ध हो जाएगा जब तक load
निकाल दिया जाता है के लिए। आप कैश्ड छवि और uncached छवि के बीच परिणाम की तुलना कर सकते हैं।
बैक बटन 'पॉपस्टेट' का उपयोग करते समय हमेशा आग लगनी चाहिए। एकमात्र मामला जहां आग लगती है वह तब होती है जब आप रीफ्रेश करते हैं, लेकिन उस स्थिति में आप यूआरआई पर किसी भी तरह से स्वयं को आधार देते हैं (यह ताज़ा करने का बिंदु है)। मुझे कुछ याद आना चाहिए, लेकिन यकीन नहीं है कि क्या। –
@ डेविडमुल्डर मैंने समस्या का प्रदर्शन करने के लिए एक jsbin पृष्ठ जोड़ा है। – bitinn
आह, कम से कम अब मुझे लगता है कि आप 'लोड' होने से पहले एक इतिहास राज्य परिवर्तन फायर कर रहे हैं ... क्यों दुनिया में आप ऐसा कर रहे हैं?केवल एक उपयोगकर्ता को कभी भी राज्य बदलना चाहिए और पहली बार जब ऐप बैक बटन लोड करता है तो उसके पास कोई पिछला ऐप विशिष्ट राज्य नहीं होना चाहिए, इसलिए मैं पूरी तरह उलझन में हूं कि आप क्या करने की कोशिश कर रहे हैं। –