Backbone.history未在IE 9后退按钮更新破(Backbone.history is

2019-09-30 07:40发布

在我们的应用程序,我们实际上有两个骨干SPA应用。 第一种是用于登录,注册和其它特征为未经验证的用户。 造成这种情况的URL会是这样的http://www.example.com/registration#signin 。 一旦你登录,你在重定向到我们的主骨架应用http://www.example.com/ui#home 。

在我的主界面的应用程序,我使用Backbone.history 没有 pushState的。 该应用程序文件看起来是这样的:

define(function (require) {    
    var App = new Marionette.Application();

    App.addInitializer(function (options) {
        ...
    });

    ...

    App.on('initialize:after', function () {
        $(function(){
            if (Backbone.history) {
                Backbone.history.start({ root: '/ui' });
            }
        });
        $.log("**WebApp**: Marionette app started.");
    });

    return App;
});

当然,一切都完美的作品,除了IE 9浏览器的任何(也许10,我需要检查)。 在IE 9,所有的路由工作正常。 点击链接,如http://www.example.com/ui#anotherpage作品。 但是 ,当用户点击浏览器的后退按钮,他们没有到最后的发射路径发回。 相反,他们被送到http://www.example.com/registration#signin ,它是由节点,我们的Web服务器提供服务的最后一页。 当我点击通过链接,我可以看到history.length和Backbone.history.history.length没有更新。

所有路由从链接/ URL的解雇。 我没有使用router.navigate()的代码中。 这是我们的路由器的例子:

define(function (require) {
    var Backbone = require('backbone'),
        Marionette = require('marionette');

    return Backbone.Marionette.AppRouter.extend({
        appRoutes: {
            "": "showHome",
            "home": "showHome",
            "foo": "showFoo"
        }
    });
});

和控制器:

define(function (require) {
    var Backbone = require('backbone'),
        Marionette = require('marionette');

    return Backbone.Marionette.Controller.extend({
        showHome: function () {
            require(['webapp','modules/home'], function (WebApp) {
                WebApp.module("Home").start();
                WebApp.module("Home").controller.showModule();
            });
        },
        showFoo: function () {
            require(['webapp', 'modules/foo'], function (WebApp) {
                WebApp.module("Foo").start();
                WebApp.module("Foo").controller.showModule();
            });
        }
    });
});

更新:

在进一步的研究,原来的问题是,旧版本的IE不记录在他们的历史哈希值发生变化。 见- 更改的location.hash,然后按返回键- IE从其他浏览器的行为不同 。 但我还是不知道这个解决方法是什么。 我猜它会以某种方式手动包括搬运哈希改变事件有一个插件,如jQuery的Hashchange和做...什么? 手动设置IE浏览器的历史? 或者制作一个自定义的历史对象,并使用它时,我们发现在IE后退按钮?

Answer 1:

我有在我们的IE浏览器的应用程序的一个同样的问题。 起骨干历史像下面的工作。

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

更新:由于提到的阮云道, 当你设置pushState的为真,哈希的URL不再触发路线。 除非你加为你的所有骨干路由服务器端支持,你需要在捕捉适当的环节和途径呼吁.navigate()客户端添加事件处理程序



文章来源: Backbone.history is not updating in IE 9. Back button broken