2016-10-16 6 views
6

में अपेक्षा के अनुरूप history.back() समारोह मुझे वापस इतिहास में एक कदम उठाने के लिए एचटीएमएल 5 इतिहास एपीआई का उपयोग करके बनाए माना जाता है। निम्नलिखित कोड काम करता है Firefox में की उम्मीद है, लेकिन क्रोम में नहीं है के रूप में:history.back() एचटीएमएल 5 इतिहास एपीआई के साथ काम नहीं करता है क्रोम

<html> 
    <script type="text/javascript"> 
     history.replaceState({path: '/home'}, '', '?page=home'); 
     history.pushState({path: '/second'}, '', '?page=second'); 
     console.log(history.state.path); // says "/second" 
     history.back(); 
     console.log(history.state.path); // says "/second" but should say "/home" 
    </script> 
</html> 

क्रोम में, यह /second दोनों बार प्रिंट, जबकि वापस जाने के बाद यह /home प्रिंट चाहिए। क्या मैं कुछ भूल रहा हूँ?

+0

यह एक ही प्रभाव है जब 'history.go (-1) का उपयोग;' 'बजाय history.back की();'? – TheRealVira

+0

हां, दोनों 'history.back() 'और' history.go (-1)' वही व्यवहार करते हैं। – ccrisan

+0

आम तौर पर यह इसे ठीक करता है ... कुछ प्रकार की क्रोम चीज भी थी, जहां आपको 'history.go (-1) 'कॉल करने के बाद' झूठी वापसी 'की आवश्यकता होती है;'। – TheRealVira

उत्तर

3

क्रोम में, history.back/history.forward/history.gohistory.state के साथ सिंक्रनाइज़ नहीं कर रहे हैं। मैं encountered this issue a while back while working on PDF.js, और क्रोमियम के मुद्दे ट्रैकर पर इसकी सूचना दी: https://crbug.com/510026। हालांकि इसमें से कुछ भी नहीं निकला है।

एक काम के आसपास का पता लगाने के popstate event उपयोग करने के लिए है जब नेविगेशन खत्म:

history.replaceState({path: '/home'}, '', '?page=home'); 
history.pushState({path: '/second'}, '', '?page=second'); 
console.log(history.state.path); // says "/second" 

addEventListener('popstate', function(event) { 
    console.log(history.state.path); // says "/home" 
    // You can also use console.log(event.state); 
}, {once: true}); 
history.back(); // Will asynchronously change history.state 

नोट: addEventListeneronce पैरामीटर के साथ ही क्रोम 55 के रूप में समर्थित है - कि इससे पहले कि आप में removeEventListener कॉल करनी होगी श्रोता आप एक श्रोता एक बार चलाना चाहते हैं, इस तरह:

addEventListener('popstate', function listener(event) { 
    removeEventListener('popstate', listener); 
    console.log(history.state.path); // says "/home" 
    // You can also use console.log(event.state); 
}); 
+0

इस दृष्टिकोण के साथ मेरी समस्या यह है कि नए राज्य पर निर्भर कोड पूरी तरह से तुल्यकालिक है। इसे अतुल्यकालिक बनाना इसे बदसूरत बना देगा और बस समझ में नहीं आता है। मैं अभी भी इसके लिए एक फिक्स के लिए इंतजार कर रहा हूँ। तब तक, मैंने क्रोम में पूरी संबंधित कार्यक्षमता को अक्षम कर दिया है। – ccrisan

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