Google Closure - Html5History запускает событие NAVIGATE дважды - PullRequest
5 голосов
/ 20 августа 2011

Почему объект goog.history.Html5History запускает событие goog.history.EventType.NAVIGATE дважды каждый раз при изменении фрагмента?Это пример кода:

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: Как я выяснил, есть два разных значения isNavigation поле e объекта в обратном вызове.Первый раз он принимает значение false, а второй раз - значение true.isNavigation означает:

isNavigation True, если событие было вызвано действием браузера, таким как перемотка вперед или назад, нажатие на ссылку, редактирование URL-адреса или вызов window.history. (Go |назад | вперед).False, если токен был изменен с помощью вызова setToken или replaceToken.

Но как получить только один, даже запущенный?

Ответы [ 2 ]

1 голос
/ 13 апреля 2012

Я встретил ту же проблему. Но в моем случае оба события имеют 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
0 голосов
/ 18 октября 2013

У меня какая-то проблема ..

У Google один раз выстрелил http://closure -library.googlecode.com / мерзавец / закрытие / GOOG / демки / history1.html

Возможно, инициация происходит дважды?

...