6

我有一个 phonegap 应用程序,需要我捕获后退按钮。这可以很好地工作,但是当我在主屏幕并按下后退按钮时,我想调用原始事件处理程序并让应用程序关闭或通过这样的按下来执行平台自然而然的任何事情。我知道我可以告诉应用程序退出,但理解这对于 iPhone 应用程序来说是一种糟糕的形式。

无论我尝试什么(并且我已经尝试了很多事情),我都无法触发原始处理程序。有什么建议吗?

在我的代码中,我的后退按钮事件处理程序中有一个 switch 语句,它根据需要引导应用程序达到以下效果:

switch blahBlah
{
    case 'this' :
        doThis() ;
        break;
    case 'main' :
        // What do I do here that is well behaved for all platforms??? 
        break;
    default:
        doFoo() ;
} 
4

3 回答 3

4

检测您何时登陆主屏幕并删除您的自定义事件处理程序。

document.removeEventListener( "backbutton", function(){}, false );

并在其他页面(或部分)上添加事件侦听器。

document.addEventListener( "backbutton", OverrideBackButton, false );

希望有帮助。

于 2013-01-15T08:36:01.920 回答
3

这是我用过的,它似乎可以很好地满足我的需要

        function pageinit() {
            document.addEventListener("deviceready", deviceInfo, true);
        }


        function deviceInfo() {
            document.addEventListener("backbutton", onBackButton, true);
        } 

        function onBackButton(e) {
            try{
                var activePage = $.mobile.activePage.attr('id');

                if(activePage == 'Options'){
                    closeOptions();
                } else if(activePage == 'Popup'){
                    closePopup();
                } else if(activePage == 'HomePage'){

                function checkButtonSelection(iValue){
                    if (iValue == 2){
                            navigator.app.exitApp();
                        }
                    }

                e.preventDefault();
                navigator.notification.confirm(
                    "Are you sure you want to EXIT the program?",
                    checkButtonSelection,
                    'EXIT APP:',
                    'Cancel,OK');
                } else {
                     navigator.app.backHistory();
                }
            } catch(e){ console.log('Exception: '+e,3); }
        }

希望这可以帮助...

于 2012-09-24T15:09:06.927 回答
2

Cordova 7.x,至少在 Android 上,似乎没有正确更新覆盖状态。因此,@SHANK 的答案不再有效。

作为一种解决方法,您可以手动禁用后退按钮覆盖,从而导致默认行为:

navigator.app.overrideBackbutton(false);

要重新激活自定义处理,类似地执行以下操作:

navigator.app.overrideBackbutton(true);

我提交了一份关于 Apache 问题跟踪器的错误报告

于 2018-03-03T18:26:10.747 回答