2011-08-20 15 views
5

Neden goog.history.Html5Tarih nesnesi fragman değiştiğinde her seferinde iki kez goog.history.EventType.NAVIGATE olayını tetikliyor? Bu kodun örnektir:Google Closure - Html5Tarihli yangınlar NAVIGATE olayını iki kez tetikliyor

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); 

Ve bu günlük geçerli:

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

UPD: anladım gibi geri aramasında e nesnenin isNavigation alanın iki farklı değerler vardır. İlk kez false değerini alır ve ikinci kez true değerini alır. isNavigation şu anlama gelir: Olay bir tarayıcı eylem tarafından tetiklenen ise, olarak ileri veya geri, URL'yi düzenleme veya window.history çağıran bir bağlantıyı tıklayarak tür

isNavigation Doğru (go | ileriye | geri.). Belirteç bir setToken tarafından değiştirilmişse veyaToken çağrısı değiştirilirse false.

Fakat sadece bir tane nasıl kovulur?

cevap

1

Aynı sorunla karşılaştım. Ama benim durumumda her iki olay da 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 

Çıktı:

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

Burada basit yama bulabilirsiniz: http://code.google.com/p/closure-library/issues/detail?id=449 Bu tarayıcı olayı popstate için bağlayıcı Html5History kaldırılan . –