Onsen UI - 处理硬件后退按钮

时间:2016-09-18 16:49:38

标签: javascript android cordova phonegap-build onsen-ui

我有一个小型的Phonegap应用,它有2个HTML页面(index.html& error.html)。当error.html处于活动状态时,我希望后退按钮(Android设备上的硬件按钮)实际返回index.html而不是退出应用程序。我尝试了以下(只是在后退按钮上触发偶数)但没有成功:

<script>
    document.addEventListener("deviceready", onDeviceReady, false);

    function onDeviceReady() {
        console.log("PhoneGap is ready");
        document.addEventListener("backbutton", onBackKeyDown, false);
    }

    function onBackKeyDown()
        {
            console.log("yes");
            return false;
        }
</script>

我在这里缺少什么?

4 个答案:

答案 0 :(得分:2)

document.addEventListener("backbutton")不适用于Onsen UI。

看起来为了使用Onsen-UI处理硬件后退按钮,您应该执行以下操作之一:

ons.ready(function() {
// To disable a navigator back button handler
navigator.getDeviceBackButtonHandler().disable();

// Or to change the behavior
navigator.getDeviceBackButtonHandler().setListener(function(event) {
console.log("back button pressed")});
}

<ons-page on-device-backbutton="doSomething()">
Some page content
</ons-page>

请详细阅读他们的文档https://onsen.io/v1/guide.html

答案 1 :(得分:0)

。重要的是要了解此事件是由Cordova触发的,因此它需要将cordova.js文件或类似文件(Monaca中的loader.js)包含在应用程序中。

http://onsen.io.s3-website-us-east-1.amazonaws.com/v2/guide/cordova.html

下面是完整的代码,请确保您已在root文件夹(即www文​​件夹)中添加了cordova.js并将其链接到我们的html页面

});

答案 2 :(得分:0)

此解决方案(感谢this中的@alecdwm)在Onsen UI PWA中为我工作。 当您可以使用Onsen导航器methods时,它可以防止使用硬件后退按钮返回历史状态。 我认为这对Cordova / Phonegap也是有用的。

window.addEventListener('load', function () {
    window.history.pushState({ noBackExitsApp: true }, '');
});
window.addEventListener('popstate', function (event) {
    if (event.state && event.state.noBackExitsApp) {
        BackButton();
        window.history.pushState({ noBackExitsApp: true }, '');
    }
});
function BackButton(){
//use navigator.popPage() OR navigator.resetToPage OR .....
}

英语。

答案 3 :(得分:0)

var currentPage = null;
ons.ready(function() {
  ons.enableDeviceBackButtonHandler();
  // Set a new handler
  ons.setDefaultDeviceBackButtonListener(function(e) {
    if (currentPage == 'home') {
      if (navigator.app) {
        navigator.app.exitApp();
      } else if (navigator.device) {
        navigator.device.exitApp();
      } else {
        window.close();
      }
    } else {
      $('ons-back-button', '#' + currentPage)
        .parent()
        .trigger('click');
    }
  });

  /**
   * Loads a page
   */
  window.fn.load = function(page, pageData) {
    var content = document.getElementById('content');
    var menu = document.getElementById('menu');
    content
      .load(page, data)
      .then(menu.close.bind(menu))
      .then(function() {
        // Save a reference to current page (because there is no navigator object)
        currentPage = $('ons-page', $('#content')).prop('id');
      });
  };
});

// ons-page example
<ons-page id="other-menu-page">
  <ons-toolbar>
    <div class="left" onclick="fn.load('pages/home.html')" tappable>
      <ons-back-button>Back</ons-back-button>
    </div>
etc...

注意:这是使用ons-splitter代替ons-navigator

的时候