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:正如我所知,回调中有两个不同isNavigation的e对象字段值.第一次它false取值,第二次它true取值.isNavigation手段:
isNavigation如果事件是由浏览器操作触发的,则为True,例如前进或后退,单击链接,编辑URL或调用window.history.(go | back | forward).如果通过setToken或replaceToken调用更改了令牌,则返回false.
但是如何让一个人甚至被解雇?
我遇到了同样的问题。但就我而言,这两个事件都有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)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |