2014-04-24 82 views
3

我有使用ionframework和cordova完成的應用程序。在我的應用程序中,我有要求,如果用戶按下按鈕,然後我需要忽略它。但只有在用戶第三次按下它時纔會關閉應用程序。科爾多瓦backbutton preventDefault不起作用

以前的項目是使用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" 
    }); 

但我不喜歡主意拋出異常。

+0

我不知道你在哪裏使用@jcesar我只張貼的preventDefault – jcesarmobile

+0

解決方法... –

+0

無論如何,如果你聽backbutton事件並創建一個函數不管理它,你不必防止任何事情。嘗試添加第三個參數給函數。 document.addEventListener(「backbutton」,yourCallbackFunction,false); – jcesarmobile

回答

0

我從應用程序註銷前做了兩次控制。因此,用戶可以按一次,並會出現一個包含文本「再次按下退出」和第二次按下 - >註銷的文本。

這是我的服務:

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

希望這將幫助你:)