Google Closure - Html5History两次触发NAVIGATE事件

Eug*_*lov 5 javascript html5 browser-history google-closure

为什么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);
Run Code Online (Sandbox Code Playgroud)

这是日志:

["navigation", "!/properties/new"]
["navigation", "!/properties/new"]
Run Code Online (Sandbox Code Playgroud)

UPD:正如我所知,回调中有两个不同isNavigatione对象字段值.第一次它false取值,第二次它true取值.isNavigation手段:

isNavigation如果事件是由浏览器操作触发的,则为True,例如前进或后退,单击链接,编辑URL或调用window.history.(go | back | forward).如果通过setToken或replaceToken调用更改了令牌,则返回false.

但是如何让一个人甚至被解雇?

Paw*_*zur 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
Run Code Online (Sandbox Code Playgroud)

输出:

goog.history.Event "example1" false
goog.history.Event "example2" false
goog.history.Event "example1" true
goog.history.Event "example1" true
Run Code Online (Sandbox Code Playgroud)