关闭后退按钮上的科尔多瓦应用程序

Posted

技术标签:

【中文标题】关闭后退按钮上的科尔多瓦应用程序【英文标题】:Close cordova app on back button 【发布时间】:2015-04-30 06:14:51 【问题描述】:

我的移动应用程序使用 cordova 和 angular.js 有以下逻辑

在 index.html 中包含的 mobile.js 中处理我的逻辑,例如将文件保存在 sdcard 上,然后使用将用户重定向到第二个 html 页面

window.location.href="main.html";

它将使用mobile.js放入sdcard中的文件

我面临的问题是,当我在 main.html 的主页上并且用户按下后退按钮时,它会返回 index.html 文件,然后在处理后返回 main.html 而不是应用关闭。

我尝试使用带有“后退按钮”事件监听器的 history.length 对象

        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】:

您可以使用 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);
        

【讨论】:

以上是关于关闭后退按钮上的科尔多瓦应用程序的主要内容,如果未能解决你的问题,请参考以下文章

禁用浏览器上的后退按钮 [关闭]

使用后退按钮关闭棉花糖上的权限请求对话框

当按下后退按钮并打开导航抽屉时,我的应用程序关闭而不是关闭抽屉

单击系统后退按钮后,通过点击推送通知运行的应用程序正在关闭

后退按钮关闭应用程序而不是转到上一个片段 android 导航组件

关闭 Internet Explorer 浏览器后退按钮上的表单字段自动完成功能