フラグメントが変更されるたびに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つだけでも解雇されますか?
あなたは、単純なパッチを見つけることができます。 http://code.google.com/p/closure-library/issues/detail?id=449 それは、ブラウザのイベントをpopstateとの結合Html5Historyを取り除くです。 –