我使用cordova和angular.js
为我的移动应用程序提供了以下逻辑在index.html中包含的mobile.js中处理我的逻辑,比如在sdcard上保存文件,然后使用
将用户重定向到第二个html页面window.location.href="main.html";
将使用mobile.js
放入sdcard的文件我面临的问题是,当我在main.html的主页上并且用户按下后退按钮时,它会返回到index.html文件,然后在处理后返回到main.html而不是App关闭。
我尝试将history.length对象与" backbutton"事件监听
document.addEventListener('deviceready',function(){
document.addEventListener('backbutton',function(e){
console.log("history is "+history.length);
if(history.length==1){
e.preventDefault();
navigator.app.exitApp();
}
else{
navigator.app.backHistory();
}
},false);
},false);
但回头时它不会减少长度,只会增加它,所以app会回到index.html。(history.length总是大于1)
我看过可用的解决方案,比如
document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
/*
Event preventDefault/stopPropagation not required as adding backbutton
listener itself override the default behaviour. Refer below PhoneGap link.
*/
//e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory()
}
}, false);
但使用它的问题是,如果用户进入
second-page->homepage->third-page->homepage
应用会退出,但应该转到第三页。
答案 0 :(得分:1)
您可以使用jQuery移动页面加载事件来保留自己的历史记录列表,当您返回时,其长度会减少。像这样的东西(我的头顶未经测试,所以可能不完全正确):
var pageHistory = [];
$(document).on("deviceready", onDeviceReady);
function onDeviceReady(){
$(document).on("pagecontainerload", onPageLoad);
$(document).on("backbutton", onBackButton);
}
function onBackButton(e){
e.preventDefault();
pageHistory.pop();
if(pageHistory.length==0){
navigator.app.exitApp();
}
else{
navigator.app.backHistory();
}
}
function onPageLoad(e, ui){
var pageId = ui.toPage.attr('id');
if(pageId !== pageHistory[pageHistory.length]){
pageHistory.push(pageId);
}
}