2012-05-02 12 views
6

मेरा Google-fu कुछ भी नहीं खींचता है।क्या इतिहास.pushstate के लिए कोई कॉलबैक है?

आप ऐसा करते हैं जब:

var stateObj = { state: "some state" }; 
history.pushState(stateObj, "page 2", "other.htm"); 

वहाँ एक संबद्ध खिड़की कॉलबैक है?

मुझे पता है कि यह है कि:

window.onpopstate = function() { 

} 

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

क्या यूआरएल में किसी भी समय बदलाव के लिए वैश्विक कॉलबैक है?

+0

http://stackoverflow.com/questions/680785/on-window-location-hash-change – Joe

+0

इसे किसी तत्व को बाध्य करने का प्रयास करें और फिर टाइप करें मूल्य टाइप करें (टाइप करें elem.onpopstate), अगर यह अपरिभाषित है तो यह समर्थित नहीं है , अगर यह एक अच्छा काम है। http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ कैसे – GillesC

+2

के संभावित डुप्लिकेट [इतिहास.pushState के माध्यम से इतिहास के परिवर्तनों के बारे में अधिसूचित कैसे करें?] (http: // stackoverflow। कॉम/प्रश्न/45700 9 3/इतिहास-पुशस्टेट के माध्यम से-इतिहास-इतिहास-पुशस्टेट के बारे में-कैसे-परिवर्तन-परिवर्तन-परिवर्तन-परिवर्तन) – thekevinscott

उत्तर

12

नहीं, onpushstate या जो कुछ भी नहीं है। हालांकि, एक छोटी बंदर पैचिंग इसे ठीक कर सकती है:

var pushState = history.pushState; 
history.pushState = function() { 
    pushState.apply(history, arguments); 
    fireEvents('pushState', arguments); // Some event-handling function 
}; 

यह केवल पुशस्टेट का उपयोग होने पर आपको सूचित करेगा। आप शायद substState के लिए कुछ ऐसा करना चाहते हैं।

यदि यूआरएल बिल्कुल भी बदलता है, तो आपको अधिसूचित होने की आवश्यकता है, ऊपर के कुछ संयोजन और हैशचेंज हैंडलर आपको वहां से अधिकतर तरीके से प्राप्त करेंगे।

+1

क्या पता है, [यह] (http://stackoverflow.com/questions/4570093/how- इतिहास-पुशस्टेट के माध्यम से इतिहास-के-इतिहास-परिवर्तन-परिवर्तन-परिवर्तन) प्रश्न लगभग समान है और यही जवाब है। : पी –

+0

क्या यह आपको किसी भी परेशानी में ला सकता है? जैसे इसे किसी तृतीय पक्ष वेबसाइट पर करना जहां आप एक स्क्रिप्ट लोड करते हैं। या यह ज्यादातर सुरक्षित है? – Cristian

+0

मुझे एक उदाहरण मिला जहां यह काम नहीं कर सकता है। उदाहरण के लिए बैकबोन.history में, 'history.pushState' संदर्भ' Backbone.history.pushState' पर कॉपी किया गया है। यदि हम '=' असाइनमेंट का उपयोग करके 'window.history.pushState' के संदर्भ को प्रतिस्थापित करते हैं तो आपके पास अभी भी 'Backbone.history.pushState' पुराना' pushState' संदर्भित होगा, इसलिए आपके बंदर पैच कोड को नहीं कहा जाता है। अगर केवल जेएस अंतर्निहित संदर्भ प्रबंधन था :( – Cristian

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