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,没有框架)有时。。。