调用默认Phonegap后退按钮处理程序

问题描述 投票:6回答:4

我有一个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() ;
} 
javascript android iphone cordova
4个回答
4
投票

落在主屏幕上时检测并删除自定义事件处理程序。

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

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

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

希望有所帮助。


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

希望这可以帮助...


2
投票

Cordova 7.x,至少在Android上,似乎没有正确更新覆盖状态。因此,@SHANK's answer不再起作用了。

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

navigator.app.overrideBackbutton(false);

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

navigator.app.overrideBackbutton(true);

我就此提交了a bug report on Apache's issue tracker


-1
投票

一个简单而顺利的方法可以是这样的,这个陈述适用于我的情况:

if($("#mainPage").is(".ui-page-active")){

     navigator.app.exitApp();

}

我正在使用jQuery:http://demos.jquerymobile.com/1.0a3/docs/api/globalconfig.html

问候 :)

© www.soinside.com 2019 - 2024. All rights reserved.