2013-01-01 19 views
8

मैं एक 'popstate' ईवेंट हैंडलर के साथ समस्या हो रही है काम करने के लिए नहीं लगता है, यह मेरा कोड है:popstate ईवेंट हैंडलर

window.addEventListener("popstate", function (event){ 
    if (event.state) { 
     alert('abc') 
    } 
}); 

// The data object is arbitrary and is passed with the popstate event. 
var dataObject = { 
    createdAt: '2011-10-10', 
    author: 'donnamoss' 
}; 

var url = '/posts/new-url'; 
history.pushState(dataObject, document.title, url); 

मैं उम्मीद इस कोड को एक चेतावनी बॉक्स पॉप अप जब यह मार डाला है जाएगा, लेकिन , कुछ नहीं हुआ।

क्या यहां कुछ भी गलत है?

धन्यवाद।

+0

कोड [jsfiddle] (http://jsfiddle.net/DJDavid98/Lrf62/) में कोड का परीक्षण, '.pushState()' घटना विफल होने लगती है। तारों के साथ चर को बदलने से मुझे घटना को आग लगने की अनुमति मिली। – SeinopSys

+0

@ डीजेडीविड 9 8 - इसका मतलब केवल 'पुशस्टेट' रिटर्न 'झूठा' या 'अपरिभाषित' है। –

उत्तर

14

pushStatepopstate घटना ट्रिगर नहीं है, केवल/आगे बटन पर क्लिक वापस (या बैकस्पेस का उपयोग करें) या history.back()/history.go(n) लागू इस घटना को ट्रिगर करेगा।

इसके अलावा, वेबकिट ब्राउज़र में, popstate ईवेंट पृष्ठ के onload ईवेंट के बाद ट्रिगर किया जाएगा, लेकिन फ़ायरफ़ॉक्स और आईई के पास यह व्यवहार नहीं है।

+1

पृष्ठ का लोड होने पर या history.pushState() कहा जाता है जब पहले वर्णित पॉपस्टेट ईवेंट ट्रिगर किया जाता है। बाद के मामले में, ईवेंट ऑब्जेक्ट में राज्य संपत्ति होगी जिसमें इतिहास.pushState() को दी गई डेटा ऑब्जेक्ट रखती है। क्या आप इसे जांच सकते हैं, कृपया, मैंने जावास्क्रिप्ट वेब एप्लिकेशन से उद्धृत किया है? – petwho

+1

मैंने पढ़ा [एचटीएमएल मानकों] (http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-pushstate) और 'popstate को ट्रिगर करने वाला कोई भी कदम नहीं मिला घटनामैं इतिहास एपीआई विषय विषय yestertoday कर रहा था और मुझे यकीन है कि 'pushState' किसी भी' popstate 'घटनाओं को आग नहीं है। यदि यह ** धक्का ** कार्रवाई ** ** ** ** ट्रिगर करता है तो यह अजीब नहीं है? यदि एक ** पुश ** एक ** पॉप ** ट्रिगर करता है, तो इतिहास स्टैक में क्या छोड़ा जाएगा? कुछ भी तो नहीं? – otakustay

+1

अब मैंने अपने दोस्त से एक जावास्क्रिप्ट वेब एप्लिकेशन बुक उधार लिया है, हां यह कहता है कि 'pushState() '' popstate' ईवेंट ट्रिगर करेगा, लेकिन मुझे लगता है कि यह इस पुस्तक की एक त्रुटि है, वेब पर कोई अन्य संसाधन ऐसे व्यवहार की पुष्टि नहीं करता है। – otakustay

4

कोई ऐसा नहीं होगा,

प्रति MDN documentation

नोट सिर्फ history.pushState() या history.replaceState() कॉल है कि एक popstate घटना ट्रिगर नहीं करेगा के रूप में। पॉपस्टेट ईवेंट केवल ब्राउज़र क्रिया करके ट्रिगर किया जाता है जैसे कि बैक बटन पर क्लिक (या जावास्क्रिप्ट में इतिहास.बैक() को कॉल करना)।

फिर this question प्रति popstate घटना Chrome में शुरू हो रहा नहीं है, क्योंकि जब आप pushState() कहते हैं।

0

history.pushState() परिभाषा के अनुसार popstate ईवेंट ट्रिगर नहीं करेगा।

कुछ सत्रों में पॉपस्टेट ईवेंट निकाल दिया जाता है जब सत्र इतिहास प्रविष्टि में नेविगेट किया जाता है।

इस घटना को केवल तभी ट्रिगर करने के लिए जब एक इतिहास प्रविष्टि के लिए नेविगेट करने का इरादा है, या तो वापस/आगे बटन, या history.go/back दबाकर।

-1

तुम भी कैलोरी इस तरह से अपनी popstate कॉलबैक हैंडलर कनेक्ट: इस onpopstate WindowEventHandler here बारे में अधिक जानकारी के लिए

window.onpopstate = someCallback; 

चेक।

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