2011-11-21 27 views
5

मैंने History.js का परीक्षण करना शुरू कर दिया है। यह समझने के बाद कि यह कैसे काम करता है और कोई popstate नहीं है, इसके बजाय statechange है। ब्राउज़र के बैक बटन दबाए जाने पर मैं अलग होने का एक तरीका ढूंढ रहा हूं।क्या यह जानने के लिए History.js में कोई तरीका है कि बैक बटन दबाया गया था

कारण यह है कि मुझे राज्य से पहले यूआरएल को जानने की जरूरत है, जिस से मैं जा रहा हूं। gist के साथ परियोजना में शामिल है, केवल यूआरएल जिसे हम देखते हैं, देखा जाता है।

मुझे आशा है कि समाधान वैश्विक चर में आने वाले नवीनतम यूआरएल को ट्रैक न करें।

धन्यवाद

उत्तर

0

मैं अंत में History.pushState का उपयोग कर सभी लिंक में कामयाब रहे, कि जिस तरह से वहाँ एक वापस बटन दबाया अलग करने के लिए कोई जरूरत नहीं है। हम सभी राज्य परिवर्तनों को उसी तरह संभालते हैं।

संपादित करें: इतिहास में इन दो मुद्दों को मिला। जीएस 'गीथूब, किसी की मदद कर सकता है। https://github.com/browserstate/history.js/issues/70 https://github.com/browserstate/history.js/issues/47

4

मैं जानता हूँ कि यह एक बहुत दिनांकित सवाल है, लेकिन मैं वापस/आगे बटन जब एक मानक पेज और एक इतिहास राज्य पेज के बीच स्विच के साथ मुद्दों का समाधान करने के लिए आया था।

परिदृश्य: पृष्ठों का एक सेट पर उपयोग एचटीएमएल 5 इतिहास (या History.js प्लगइन) तो अन्य पृष्ठों हम वास्तविक लोड की जरूरत है, एक मानक पेज उर्फ ​​(मत पूछो क्यों, लेकिन वहाँ कुछ उपयोग के मामलों रहे हैं यह है कि आवश्यकता हो सकती है)

जब आप किसी इतिहास-राज्य पृष्ठ से जाते हैं, और मानक पृष्ठ पर वास्तविक लोड करते हैं। आप वापस नहीं जा सकते: यह यूआरएल बदलता है, लेकिन पृष्ठ लोड नहीं करता है - यह केवल एक राज्य परिवर्तन को चलाता है; जो मुझे लगता है वह मूल पोस्ट का मुद्दा है। मेरी व्यक्तिगत राय यह है कि यह एक ब्राउज़र बग है (हालांकि सभी ब्राउज़रों में समस्या है), क्योंकि ब्राउज़र को पता होना चाहिए कि जिस पृष्ठ पर आप हैं, उसे इतिहास-राज्य पृष्ठ के बाहर पुनः लोड किया गया था।

मैंने इसे वास्तव में कुछ सरल के साथ तय किया: राज्य परिवर्तन ईवेंट सुनना और ब्राउज़र को आग लगने पर ताज़ा करने के लिए कहें। इस तरह से मुझे परवाह नहीं है कि वे इस पृष्ठ से वापस या आगे जाते हैं। यदि ब्राउज़र सोचता है कि राज्य बदल रहा है (लिंक राज्य परिवर्तन घटना को आग नहीं देते हैं), इतिहास इतिहास पृष्ठ में केवल पीछे/आगे इस घटना को आग लगती है, इसलिए यह समस्या हल करती है।

कोड, jQuery + History.js प्लगइन का उपयोग कर:

$(window).on('statechange', function() { 
    window.location.reload(); 
}); 

यदि यह मतलब नहीं है, तो आप शायद समस्या आ रही नहीं कर रहे हैं। हालांकि, मैंने कई साइटों पर यह देखा है कि एचटीएमएल 5 इतिहास का उपयोग करें (यहां तक ​​कि pinterest.com में यह समस्या है यदि आप छवि मोडल पर फिर से लोड करते हैं और फिर वापस जाने का प्रयास करते हैं)।

उम्मीद है, यदि आप इस समस्या है, तो आप इस सवाल का जवाब खोजने के लिए और राहत की एक बड़ी उच्छ्वास :)

+2

मैंने इसी तरह के तर्क के बारे में सोचा था, हालांकि, पुशस्टेट जारी करते समय स्थिति बदल जाती है और जब पीछे/आगे दबाया जाता है, जो अनंत रीलोडिंग लूप बनाता है। – Dean

+0

दरअसल, एक बड़ी राहत। मैं हारने वाला था। –

17

मैं अपने उद्देश्यों के लिए थोड़ा overdone जा करने के लिए GitHub पर समाधान पाया होगा। मैंने एक बूल बनाया जो हमेशा सही है, जब मैंने राज्य को बदलने के लिए इतिहास का उपयोग किया था।

var manualStateChange = true; 

History.Adapter.bind(window,'statechange',function(){ 
    if(manualStateChange == true){ 
    // BACK BUTTON WAS PRESSED 
    } 
    manualStateChange = true; 
}); 

किसी भी समय मैं राज्य प्रोग्राम के रूप में बदलने के लिए, गलत पर bool सेट:

manualStateChange = false; 
History.pushState(null, null, currentPath); 
+0

अच्छी सोच ... – JDandChips

+1

मैंने वही किया, लेकिन यह 'बैक' और 'फॉरवर्ड' बटन के बीच अंतर नहीं करेगा। – GTCrais

+0

यह वही है जो मुझे चाहिए, धन्यवाद: डी ... मुझे '// बैक बटन प्रीसेड' बिट में 'location.reload() 'की आवश्यकता है, इसलिए' बैक 'और' फॉरवर्ड 'चिंता का विषय नहीं है: डी –

0

'सरकारी' संस्करण यह सुविधा उपलब्ध नहीं है। मुख्य रूप से इस फ़ाइल का उपयोग करने का प्रयास करें: https://github.com/danger89/history.js/blob/master/scripts/bundled/html5/jquery.history.js

मैं गारंटी नहीं दे सकता कि उसका समाधान प्रत्येक ब्राउज़र के लिए काम करता है। लेकिन यह एक अच्छा समाधान है। आप अपने परिवर्तन लागू हैं, तो आप उपयोग कर सकते हैं:

var State = History.getState(); 
if (State.navigation) { 
    // Back/forward button is pressed. 
} 

अधिक जानकारी Github issue 47 पर पाया जा सकता।

0

जेम्स वैगनर की तुलना में इसी तरह का जवाब। 'स्टेटचेंज' ईवेंट दोनों तरीकों से निकाल दिया जा रहा था, इसलिए इसके बजाय मैं केवल 'पॉपस्टेट' ईवेंट की जांच करता हूं, जो मेरे मामले में केवल तब कहा जाता है जब उपयोगकर्ता वापस जाता है।

window.addEventListener('popstate', function() { 
    window.location.reload(); 
}); 
संबंधित मुद्दे

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