6

当用户点击某些 URL 路由时,我正在使用 Backbone.js 路由器触发某些初始化方法。因此,/posts/1通过 vanilla 锚标记应该触发与/posts/:id我的 Backbone 路由器相关联的任何回调。设置时,这在现代浏览器中运行良好Backbone.history.start({ pushState : true })。但是,在 IE中,尝试点击的用户/posts/1将被重定向到/#posts/1,这只是我的主页,带有无意义的哈希字符串。

需要明确的是,我不需要 pushState。我不想将URL推送到浏览器历史记录。我只是想阅读它们,然后触发回调,这在任何浏览器中都应该是可行的。

看起来像简单的功能,但我很难过。

谢谢!

4

3 回答 3

7

我可以在这里回答我自己的问题。我在这里需要的功能类型可以通过以下方式实现:

var suffix_pattern = new RegExp('\/?' + config.history_root + '\/?','i');

// if IE
if (!Modernizr.history) {

    // initialize router/Backbone.history, but turn off route parsing,
    // since non-window.history parsing will look for a hash, and not finding one,
    // will break our shit.
    Backbone.history.start({ silent: true, hashChange: true });

    // convert any post-# elements to a standard URL to be parsed by our router
    var subroute = window.location.hash.replace('#', '/').split('?')[0],
           route = window.location.pathname.replace(suffix_pattern, '') + subroute;

    Backbone.history.loadUrl(route);
} else {
    Backbone.history.start({ pushState: true, silent: true });
    Backbone.history.loadUrl(Backbone.history.getFragment().replace(suffix_pattern, '').split('?')[0]);
}
于 2013-01-30T15:04:59.153 回答
0

这对我有用:Backbone.history.start({root: '/my_app_dir_here/'});

于 2014-12-02T16:34:32.707 回答
0

如果您不关心不支持 pushState 的浏览器中的 ajax 页面加载,请使用 option {hashChange: false}。每次路由更改时,这都会导致页面加载困难。

例如

Backbone.history.start({ pushState: true, hashChange:false });

来自 Backbone.js 文档:

如果您想使用 pushState,但浏览器本身不支持它,而是使用全页刷新,您可以将 {hashChange: false} 添加到选项中。

于 2015-06-11T18:27:18.807 回答