2011-08-20 14 views
5

क्यों जाता है goog.history.Html5History5 हिस्ट्री ऑब्जेक्ट आग goog.history.EventType.NAVIGATE ईवेंट प्रत्येक बार दो बार जब खंड बदल जाता है? इस कोड का उदाहरण है:Google क्लोजर - Html5History नेविगेशन ईवेंट को दो बार

var history = goog.history.Html5History.isSupported() 
     ? new goog.history.Html5History() 
     : new goog.History(); 
goog.events.listen(history, goog.history.EventType.NAVIGATE, function(e) { 
     console.log(['navigation', e.target.getToken()]); 
}); 
history.setEnabled(true); 

और यह लॉग है:

["navigation", "!/properties/new"] 
["navigation", "!/properties/new"] 

युपीडी: जैसा कि मैंने पता लगा है वहाँ कॉलबैक में e वस्तु की isNavigation क्षेत्र के दो अलग-अलग मान रहे हैं। पहली बार यह false मान लेता है, और दूसरी बार यह true मान लेता है। isNavigation का अर्थ है:

isNavigation यह सच है, तो घटना में ब्राउज़र कार्यवाही से शुरू हो रहा था, इस तरह के के रूप में आगे या पीछे, संपादन URL, या window.history बुला, एक लिंक पर क्लिक करने (जाना | वापस | आगे।)। झूठी अगर टोकन को को एक सेट टोकन या प्रतिस्थापित कॉल द्वारा बदला गया है।

लेकिन केवल एक को कैसे निकाला जाए?

उत्तर

1

मुझे एक ही समस्या से मुलाकात हुई। लेकिन मेरे मामले में दोनों घटनाओं में isNavigation==true है।

init = function() { 
    var h = goog.history.Html5History.isSupported() ? 
     new goog.history.Html5History() : new goog.History(); 

    goog.events.listen(h, goog.history.EventType.NAVIGATE, navigationCallback); 
    h.setEnabled(true); 
}; 

navigationCallback = function(e) { 
    console.log(e, e.token, e.isNavigation); 
}; 

// And then: 
h.setToken("example1"); 
h.setToken("example2"); 
// And click "back" button in browser 

आउटपुट:

goog.history.Event "example1" false 
goog.history.Event "example2" false 
goog.history.Event "example1" true 
goog.history.Event "example1" true 
+1

यहाँ आप साधारण पैच पा सकते हैं: http://code.google.com/p/closure-library/issues/detail?id=449 यह ब्राउज़र घटना popstate लिए बाध्यकारी Html5History को हटाने है। –

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