关闭后面按钮上的cordova app

时间:2015-02-27 13:52:02

标签: android angularjs cordova

我使用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

应用会退出,但应该转到第三页。

1 个答案:

答案 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);
    }    
}