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

Dav*_* D. 29 android dom-events angularjs cordova ionic-framework

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

的index.html

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

请注意,当我按下按钮时,我的控制台中显示"hello".

Dav*_* D. 39

终于找到了这个离子论坛帖子的答案:

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

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

  • 实际上它确实有效,但只在顶级状态从'sectionA'到'sectionB'而不是'sectionA.subsectionA'到'sectionA.subsectionB' (3认同)

Muh*_*han 23

$ionicPlatform.registerBackButtonAction(function (event) {
    event.preventDefault();
}, 100);
Run Code Online (Sandbox Code Playgroud)

这将阻止后退按钮功能.

  • 我可以将此代码放在控制器中吗? (5认同)

Wes*_*ger 13

为了扩展David D的答案,我已经包含了返回实现.

把它放在你的应用程序.run功能中:

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

这在控制器中不起作用,它在应用程序范围内.

  • 实际上它确实有效,但只在顶级状态从'sectionA'到'sectionB'而不是'sectionA.subsectionA'到'sectionA.subsectionB' (2认同)