【问题标题】:Cordova backbutton preventDefault is not workingCordova 后退按钮 preventDefault 不起作用
【发布时间】:2014-06-10 11:15:00
【问题描述】:

我有使用 ionicframework 和 cordova 完成的应用程序。在我的应用程序中,我要求如果用户按下后退按钮,那么我需要忽略它。但只有在用户第三次按下它之后,它才会关闭应用程序。

以前的项目是使用 phonegap 和 jquery 完成的,并且代码相同。当我抛出异常时,我做了一些小的解决方法,然后应用程序在不应该关闭的时候没有关闭。

 document.addEventListener("backbutton", function (e) {
        if (new Date() - firstDateClick > 1000) {
            firstDateClick = new Date();
            totalClicks = 1;
        } else {
            totalClicks++;
            if (totalClicks >= 3) {
                var answer = confirm('Are You Sure You Want Exit');
                if (answer) {
                    var service = angular.injector(['ng', 'starter.services']).get('DanceService');
                    service.logEvent("exit")
                        .then(function () {
                            alert('exit1')
                            if (navigator.app) {
                                navigator.app.exitApp();
                            }
                            else if (navigator.device) {
                                navigator.device.exitApp();
                            }

                        })
                } else {
                    totalClicks = 1;
                }
            }
        }
        throw "ignore"
    });

但我不喜欢抛出异常的想法。

【问题讨论】:

  • 我看不到您在哪里使用 preventDefault
  • @jcesar 我只发布了解决方法...
  • 无论如何,如果你监听后退按钮事件并创建一个函数而不管理它,你不必阻止任何事情。尝试向函数添加第三个参数。 document.addEventListener("backbutton", yourCallbackFunction, false);

标签: angularjs cordova-3 ionic-framework


【解决方案1】:

在退出应用程序之前,我进行了两次控制。因此,用户可以按一次,然后会出现一个 toast,并显示“再次按退出”和第二次按 -> 注销。

这是我的服务:

    var deregisterFunction = null;

    return {
        disableBack: disableBack,
        registerAction: registerAction,
        goHome: goHome,
        goBack: goBack,
        deregisterAction: deregisterAction,
        closeApp: closeApp
    };

    function disableBack() {
        deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(null, 101));
    }

    function registerAction(cb, priority) {
        deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(cb, priority));
    }

    function deregisterAction() {
        if (deregisterFunction) {
            deregisterFunction();
        }
        goBack();//default behaviour
    }

    function goHome() {
        deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
            $state.go('app.home');
        }, 101));
    }

    function goBack() {
        deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
            $ionicHistory.goBack();
        }, 101));
    }

    function closeApp() {
        deregisterFunction = angular.copy($ionicPlatform.registerBackButtonAction(function() {
            ionic.Platform.exitApp();
        }, 101));
    }

这是我的 utils 服务:

    var service = {
      logoutToast: logoutToast,
      resetToastCount: resetToastCount
    };

    var toastCount = 0;

    return service;

    function resetToastCount() {
      toastCount = 0;
    }

    function logoutToast() {
      switch (toastCount) {
        case 0:
          $cordovaToast.show('Press again to log out', 'short', 'bottom');
          toastCount++;
          break;
        case 1:
          toastCount = 0;
          //logout
          break;
        default:
          $cordovaToast.show('Error', 'short', 'bottom');
      }
    }

}
}());

所以在我的控制器中我有这个来注册我的服务的操作:

$scope.$on('$ionicView.afterEnter', backButtonService.registerAction(utils.logoutToast, 101));

这用于重置我想要的计数:

$scope.$on('$ionicView.afterEnter', utils.resetToastCount());

这用于在我导航时取消注册我的操作:

$scope.$on('$stateChangeStart', backButtonService.deregisterAction);

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    禁用 Ionic/Cordova 上的后退按钮

    $ionicPlatform.registerBackButtonAction(null, 101);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2015-04-10
      • 1970-01-01
      • 2014-12-27
      • 2014-05-06
      相关资源
      最近更新 更多