在Ionic应用程序中禁用硬件后退button?

我试图禁用我的cordova应用程序后退button。 我正在使用AngularJS + Ionic Framework。 我find了关于这个的主题,并尝试了下面的代码,但它完全没有影响。 任何想法? 谢谢!

的index.html

<head> <script> document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { document.addEventListener("backbutton", function (e) { e.preventDefault(); console.log("hello"); }, false ); } </script> </head> 

请注意,当我按下button时,我的控制台中显示“hello”。

Solutions Collecting From Web of "在Ionic应用程序中禁用硬件后退button?"

终于find了这个离子论坛主题的答案:

 $ionicPlatform.registerBackButtonAction(function () { if (condition) { navigator.app.exitApp(); } else { handle back action! } }, 100); 

$ionicPlatform.registerBackButtonAction允许完全覆盖返回button的行为。 第一个参数是一个callback函数,第二个参数是一个优先级(只有最高优先级的callback被执行)。

 $ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); }, 100); 

这将阻止后退button的function。

为了扩大David D的回答,我已经包括了回去的实施。

把它放在你的应用程序中.run函数:

 $ionicPlatform.registerBackButtonAction(function (event) { if ($ionicHistory.currentStateName() === 'someStateName'){ event.preventDefault(); } else { $ionicHistory.goBack(); } }, 100); 

这在控制器中不起作用,在应用范围内。

其简单的技巧,防止返回到单个页面:

  `.controller('DashCtrl', function($scope,$ionicHistory) { $ionicHistory.clearCache(); $ionicHistory.clearHistory(); })` 

文档中的示例显示事件侦听器 – 即使是已deviceready – 在文档onload事件触发后被附加。

使用你的代码:

 function onDeviceReady() { document.addEventListener("backbutton", function (e) { e.preventDefault(); console.log("hello"); }, false); } document.onload = function () { document.addEventListener("deviceready", onDeviceReady, false); }; 

为了防止App从设备后退buttonfunction的使用,

  $ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); }, 100); 

如果你想防止特定的页面使用,

  $ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); if ($location.path() === "/pagename" || $location.path() === "pagename") { navigator.app.exitApp(); } else { $ionicHistory.goBack(); } }, 100); 

要在控制器(或组件的控制器)的Ionic应用程序中禁用硬件后退button,可以采取以下解决方法,但首先它不是控制器本身,而是控制器和状态之间的组合,在控制器中添加正常的代码:

  var deRegisterHardBack = $ionicPlatform.registerBackButtonAction( function (event) { if (youConditionHere) { event.preventDefault(); // do something } else { $ionicHistory.goBack(); } }, 100); 

但是在你的$stateProvider添加disableHardwareBackButton ,如下所示:

 $stateProvider .state('app.stateB', { url: '/page-b/:id', template: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>', disableHardwareBackButton : true }); 

在你的模块('app')里面运行function:

 $ionicPlatform.registerBackButtonAction(function(event){ if ($state.current.disableHardwareBackButton){ event.preventDefault(); } else { $ionicHistory.goBack(); } } 

通过这种方式你可以解决“子部分”或“内部控制器”