Подтвердить что ты не робот

Отключить аппаратную кнопку возврата в приложении Ionic?

Я пытаюсь отключить кнопку "Назад" в приложении "Кордова". Я использую 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>

Обратите внимание, что когда я нажимаю кнопку, у меня появляется "привет" на моей консоли.

4b9b3361

Ответ 1

Наконец-то нашел ответ на this Ионный форум:

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

$ionicPlatform.registerBackButtonAction позволяет полностью перезаписать поведение кнопки "Назад". Первый параметр - это функция обратного вызова, а вторая - приоритет (выполняется только обратный вызов с наивысшим приоритетом).

Ответ 2

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

это предотвратит функциональность кнопки "Назад".

Ответ 3

Чтобы расширить ответ Давид D, я включил повторную реализацию.

Поместите это в свои приложения. Функция run:

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

Это не будет работать в контроллерах, оно широко применяется.

Ответ 4

Простой трюк предотвратит возврат к отдельной странице:

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

       })`

Ответ 5

Пример в docs показывает, что прослушиватели событий - даже deviceready - прикрепляются после события документа onload уволена.

Использование вашего кода:

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

document.onload = function () {
  document.addEventListener("deviceready", onDeviceReady, false);
};

Ответ 6

Чтобы предотвратить использование функции кнопки "Назад" от кнопки "Назад",

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

Ответ 7

Чтобы отключить обратную функцию оборудования в приложении 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: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>',
        disableHardwareBackButton : true
      });

Внутри вашего модуля ( "приложение" ) функция запуска:

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

Таким образом, вы сталкиваетесь с проблемой с "подсектором" или "внутренним контроллером"