使用Backbone历史记录/推送状态时出现问题 - 但仅限于不支持它的浏览器(旧IE)
问题是这个。当我第一次访问/en_gb/dashboard
时 - 在所有浏览器中一切正常。但是,在IE< = 9中,它会将#dashboard
附加到地址栏,形成/en_gb/dashboard#dashboard
。现在,当我点击刷新时,我的路由器没有触发。
并非我的所有网站都受到Backbone控制 - 因此路由器正在运行:
routes: {
'dashboard': 'showDashboard'
}
我的引导程序如下所示:
if (Backbone.history) {
var pushStateSupported = _.isFunction(history.pushState);
var urlRoot = '/en_gb/';
var enableSilent = !pushStateSupported;
Backbone.history.start({
pushState: pushStateSupported,
root: urlRoot,
silent: enableSilent
});
if (!pushStateSupported) {
Backbone.history.navigate(window.location.pathname.substring(urlRoot.length), { trigger: true });
}
}
添加调试,我可以看到Backbone.history.navigate()
始终被调用,但是当存在该哈希时,trigger: true
似乎没有被选中。
答案 0 :(得分:0)
嗯 - 我似乎修好了 - 虽然不是一个优雅的解决方案,但它确实为我解决了这个问题:
if (!pushStateSupported) {
var route = window.location.pathname.substring(urlRoot.length);
Backbone.history.navigate('/#' + route, { trigger: true });
}
地址栏中的网址显示为/en_gb/dashboard##dashboard
并不优雅 - 但它现在正在通过Backbone.navigate()
方法。
if (this.fragment === fragment) return;