2011-08-20 8 views
5

フラグメントが変更されるたびにgoog.history.Html5Historyオブジェクトがgoog.history.EventType.NAVIGATEイベントを2回発射するのはなぜですか?これは、コードの例を次に示します。Googleクローズ - Html5HistoryでNAVIGATEイベントが2回発生する

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"] 

UPD:私は考え出してきたように、コールバックでeオブジェクトのisNavigationフィールドの2つの異なる値があります。最初にfalseの値をとり、2回目にはtrueという値が必要です。 isNavigationは意味:イベントがブラウザのアクションによってトリガーされた場合、 として前後に、URLを編集するか、 window.historyを呼び出して、リンクをクリックするように

isNavigationがTrue(行く|前方|バック。 )。トークンがsetTokenまたはreplaceToken呼び出しによって に変更された場合はFalseを返します。

しかし、どのようにして1つだけでも解雇されますか?

答えて

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を取り除くです。 –

関連する問題