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

我正在尝试禁用Cordova应用程序上的后退按钮。 我正在使用AngularJS + Ionic Framework。 我find了关于这个的主题并尝试了下面的代码,但它绝对没有效果。 任何想法? 谢谢!

的index.html

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

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

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

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

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

$ionicPlatform.registerBackButtonAction允许完全覆盖后退按钮行为。 第一个参数是回调函数,第二个参数是优先级(仅执行具有最高优先级的回调)。

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

这将阻止后退按钮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从设备返回按钮function使用,

  $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应用程序中禁用硬件后退按钮,您可以进行以下解决方法,但首先它实际上不适用于控制器本身,但它在控制器和状态之间的组合,在您的控制器中添加您的正常代码:

  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: 'Sub Page Hello', disableHardwareBackButton : true }); 

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

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

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

对于Ionic 3:

 // root component export class MyApp { constructor(platform: Platform) { platform.ready().then(() => { platform.registerBackButtonAction(() => { this.customBackButtonHandler(); }, 100) }); } customBackButtonHandler() { ... } }