जैसे कुछ बात कर सकते हैं आप ' बैक बटन को पृष्ठ लोड करने से रोकने के लिए इतिहास पर वर्तमान पृष्ठ से धक्का दिया है।
यदि आप अपने वेब ऐप में उपयोगकर्ता को "निहित" रखने की कोशिश कर रहे हैं तो बैक बटन हमेशा किसी प्रकार का फ़ंक्शन प्रदान करता है, आपको कम से कम दो राज्यों को ढेर पर धक्का देना होगा और फिर किसी अन्य स्थिति को धक्का देना सुनिश्चित करें अपने popstate हैंडलर से।
var foo = {foo: true}; // state object
history.pushState(foo, "unused argument", "#newInitialUri");
...
var bar = {bar: true}
history.pushState(bar, "unused argument", "#newStateOfWebApp");
...
window.onpopstate = function(event){
...
var baz = {baz: true}
history.pushState(baz, "unused argument", "#baseState");
};
उपरोक्त उदाहरण में हम कहते हैं कि '/' लोड किया गया है। स्क्रिप्ट निष्पादन शुरू हो जाती है और ब्राउज़र विंडो यूआरआई '/ # newInitialUri' में बदल जाती है लेकिन कोई पृष्ठ लोड नहीं होता है। फिर तुरंत बाद, ब्राउज़र यूआरआई '/ # newStateOfWebApp' में बदल जाता है और कोई पृष्ठ लोड नहीं होता है।
उपयोगकर्ता अपने ब्राउज़र पर बैक बटन दबाता है। आपका पॉपस्टेट हैंडलर आग लगाता है। आपके हैंडलर के दौरान, event.state foo के बराबर है और ब्राउज़र यूरी '/ # newInitialUri' है। कोई पेज लोड नहीं होता है। हैंडलर पूरा करने को पूरा करता है, इतिहास.pushState को कॉल करता है और अब ब्राउजर यूरी '/ # बेसस्टेट' है। कोई पेज लोड नहीं होता है। यदि उपयोगकर्ता दोबारा क्लिक करता है, तो आपकी पॉपस्टेट घटना फिर से आग लग जाएगी, event.state foo (दोबारा) के बराबर होगा, ब्राउज़र यूरी '/ # newInitialUri' (कोई पेज लोड नहीं होगा) और फिर यह '/ # बेसस्टेट' होगा (कोई पेज लोड नहीं)।
यह ध्यान रखना होगा कि आपके popstate हैंडलर में event.state हमेशा यूआरआई के लिए राज्य वस्तु शामिल तुम सिर्फ , एक नहीं तुम सिर्फ से आया पर वापस आएँ है। यह पहली बार मुझे भ्रमित कर रहा था, लेकिन जब मैंने इसके बारे में सोचा तो समझ में आया। उदाहरण के लिए, उपयोगकर्ता शायद Google पर जाने के बाद आपके पृष्ठ पर वापस आ सकता है। राज्य वस्तु आपके ऐप की स्थिति को आपके कोड में संवाद करने का अवसर है।
ध्यान रखें कि कुछ ब्राउज़र पृष्ठ लोड पर पॉपस्टेट ईवेंट को आग लगाते हैं (जो मेरी समझ से spec के अनुसार होता है)। यह सुनिश्चित करने के लिए कि आप उस कोड को नहीं चलाते हैं, जिसे आप पृष्ठ लोड पर नहीं लेना चाहते हैं, अपने कोड को निष्पादित करने से पहले अपने हैंडलर में अपने राज्य ऑब्जेक्ट की जांच करना सुनिश्चित करें।
एक अंतिम नोट: यदि आप ईवेंट को संभालने के लिए jQuery का उपयोग कर रहे हैं, तो आपको राज्य ऑब्जेक्ट को संदर्भित करने के लिए event.originalEvent.state का उपयोग करना होगा।
क्या आपका "ऑनपोस्टेट" फ़ंक्शन 'झूठा' वापस लौटाता है या वापस आने से पहले ईवेंट ऑब्जेक्ट पर ".preventDefault()" कॉल करता है? – Pointy
(वास्तव में केवल 'झूठा' वापस लौटना काम नहीं कर सकता है।) – Pointy
मैंने झूठी वापसी की कोशिश की, लेकिन यह कुछ भी नहीं किया। – GhotiPhud