我已经使用移动应用界面(使用Ratchet)构建了一个Meteor应用程序,仅用于作为应用程序运行。在每个页面上,都有一个“后退”链接,可以将您带回到父页面。例如,如果我深入到页面层次结构中,例如:
主页>分类>交
我可以使用Post页面中的链接将我带回Category页面。现在,问题是,如果来自此类别页面我点击后退按钮,它应该具有与单击页面上的后退链接相同的行为。 (在这种情况下,请带我到主页)遗憾的是,这不会发生,我会被带回Post页面。
在iPhone上,这不是问题(据我所知),因为设备内置了没有实际的后退按钮。但是在Android上,它给我带来了麻烦,例如:
假设用户使用页面上显示的按钮进入可以删除的帖子页面。当删除后方法完成后,我将用户带回“类别”页面:
Router.go('categoryPage', {'_id': categoryId});
问题是:如果用户在删除帖子后点击后退按钮,他/她将被带到“未找到”页面,因为上一篇文章已被删除。现在我可以通过这样添加replaceState: true
来避免这种情况:
Router.go('categoryPage', {'_id': categoryId}, {replaceState: true});
但现在当用户点击“类别”页面中的后退按钮时,他或她将被带到之前帖子页面的页面,该页面是......相同的类别页面。所以按钮在第一次按下时什么都不做。
我也尝试在我的每个模板的`渲染函数中pushState所需页面的url,但是没有用(我在主页上放什么?):
Template.categoryPage.rendered = function () {
history.pushState(null, null, Router.url('home'));
};
Template.postPage.rendered = function () {
history.pushState(null, null, Router.url('categoryPage', {'_id': this.data.categoryId}));
};
有没有人解决过这个问题和/或能够放弃一些知识?
答案 0 :(得分:4)
按下后退按钮后,Cordova会触发"后退按钮"活动,请参阅there。
通过收听此事件,您应该能够覆盖默认行为并执行您想要的操作:
document.addEventListener("backbutton", onBackButtonDown, false);
function onBackButtonDown(event) {
event.preventDefault();
event.stopPropagation();
// Do what you want
...
}