Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript History.pushState仅在带主干的第二个后退按钮上工作_Javascript_Backbone.js_Browser History_Pushstate_Html5 History - Fatal编程技术网

Javascript History.pushState仅在带主干的第二个后退按钮上工作

Javascript History.pushState仅在带主干的第二个后退按钮上工作,javascript,backbone.js,browser-history,pushstate,html5-history,Javascript,Backbone.js,Browser History,Pushstate,Html5 History,我正在尝试获取返回和前进按钮,这些按钮在具有历史记录的主干单页应用程序中工作。按下状态和路由器。导航 在我意识到苹果产品(MAC、iPhone、iPad)上的popstate事件是在页面加载时触发的之前,我一直在努力工作!噩梦 因此,我一直在尝试让一切正常工作,我阻止了popstate在页面加载时启动,并设法让后退和前进按钮正常工作,但不幸的是,它们在第一次单击时就不起作用。我已经找到了原因,但我不知道如何修复它 下面是一些代码: window.onpopstate = function (ev

我正在尝试获取
返回
前进
按钮,这些按钮在具有
历史记录的主干单页应用程序中工作。按下状态
路由器。导航

在我意识到苹果产品(MAC、iPhone、iPad)上的
popstate
事件是在页面加载时触发的之前,我一直在努力工作!噩梦

因此,我一直在尝试让一切正常工作,我阻止了
popstate
在页面加载时启动,并设法让
后退
前进
按钮正常工作,但不幸的是,它们在第一次单击时就不起作用。我已经找到了原因,但我不知道如何修复它

下面是一些代码:

window.onpopstate = function (event) {
    Backbone.trigger('popstate', event);
};
上面的代码用于在触发
popstate
事件时触发我的主干功能

ContainerView = Backbone.View.extend({
    el: 'body',
    events: {
        ...
    },
    initialize: function() {        
        ...
        ...
        this.listenTo(Backbone, 'popstate', this.onPopState);
    },
    onPopState: function(event) {
        app.popStateTriggered = true;
        if (event.state && _.keys(event.state).length > 0) {
            var pathName = window.location.pathname;
            var pageName = "index.php";
            if(pathName.indexOf(".php") > -1) {
                var pageName = pathName.substring(pathName.lastIndexOf('/') + 1, pathName.lastIndexOf('php') + 3);
            }
            $('.navigation-item[href="'+pageName+'"]').eq(0).click();
        }
    },
    ...
上述代码侦听
popsate
的触发器,并运行
onPopState
功能。
onPopState
函数读取以查看是否传递了
event.stat
e,这就是防止代码在页面加载时运行的方法,如果存在
event.status
则代码运行并加载请求的视图

window.history.pushState({ customState: pageUrl }, pageName, pageUrl);
以上是我的
pushState
功能

我的问题是,当我第一次按下后退按钮
event.stats=undefined
(不好),然后第二次按下后退按钮
event.status=object{customState:“index.php”}
(好)。但是为什么这只在第二次起作用,我不能解决它,它让我发疯

如果有人能帮忙,那就太棒了

编辑

这是我的路由器:

var app = app || {};

(function($) {

    var Router = Backbone.Router.extend({
        routes: {
            '': 'instantiateHome',
            'index.php': 'instantiateHome',
            'our-approach.php': 'instantiateOurApproach',
            'our-work.php': 'instantiateOurWork',
            'people.php': 'instantiatePeople',
            'social.php': 'instantiateSocial',
            'contact-us.php': 'instantiateContactUs',
            "*notFound" : 'notFound'
        },
        instantiateHome: function() {
            if (app.ajaxActive) {... // instantiateView()}
        },
        instantiateOurApproach: function() {
            ... // instantiateView()
        },
        instantiateOurWork: function() {
            ... // instantiateView()
        },
        instantiatePeople: function() {
            ... // instantiateView()
        },
        instantiateSocial: function() {
            ... // instantiateView()
        },
        instantiateContactUs: function() {
            ... // instantiateView()
        },
        notFound: function() {
            ... // instantiateView()
        }
    });

    app.router = new Router();

    var location_pathname = window.location.pathname;
    var site_url = location_pathname.replace(location_pathname.split("/").pop(),"");
    var urlArray = location_pathname.split("/");
    var pageUrl = urlArray[urlArray.length-1];
    if (Modernizr.history) {
        Backbone.history.start({pushState: true, root: site_url});
    } else {
        Backbone.history.start({hashChange: false, root: site_url});
    }

    app.router.navigate(pageUrl, {trigger: true});

    history.replaceState({ customState: true });

})(jQuery);

我能看看你的路线是在哪里定义的吗?@KenWheeler我已经帮你更新了。嘿,你有没有弄明白?这似乎是发生在我(使用香草JS,没有框架)有时。。。