问题 Javascript backbutton事件监听器覆盖了android设备后退按钮


我创造了 Android app 运用 cordova 2.6.0。我实施了一个 menu 我的应用中的功能使用 html 加价和 jQuery 切换与设备的交互 menubutton。但我无法想象达到以下要求,表现得像本机应用程序。

需求

menu 应该隐藏在按下设备上 backbutton 如果 menu 是 visible。如果 menu 是不可见的 backbutton 现在应该正常行事,这应该是应该的 exit 该 app 或者去 back history

这是我的代码

document.addEventListener('deviceready', function(){

document.addEventListener('menubutton', function(){
//Toggle Menu
//Which is working fine
});

document.addEventListener('backbutton', function(){
if(menu is visible) {
  //Hide the menu
  //This is also working fine
return false;
} 

//BUT the default action of backbutton has gone. It cannot exit the app , neither it brings to back history.

//return true;
//I have also tried to return boolean true , but facing the same problem.
});

}, false);

实际问题

如果我附上了 eventlistener 对于 backbutton 设备的 Back Button 被禁用,它不能正常工作。

我的问题是

document.addEventListener('backbutton', function(){}); 超过设备的后退按钮?如何摆脱它?

这是在Android 4.1.2设备上发生的


5436
2017-09-25 06:31


起源



答案:


使用侦听器覆盖后退按钮后,它不会执行本机功能。您还必须实现退出行为。

在您的重写方法中,使用以下方法

document.addEventListener('backbutton', function(){
  if(menu is visible) {
       //Hide the menu
       //This is also working fine
   return false;
  }
  else //nothing is visible, exit the app
  {
    navigator.app.exitApp();
  }
});

希望有所帮助。


10
2017-09-25 08:26



我能改变一下吗? java 或者完全是 impossible? - Lekhnath
我不知道java中的确切可能性,但这是编程的基本规则,一旦你被覆盖,你需要在你自己的函数中实现完整的功能。 - SHANK
如果我需要手动完成,我怎么可能 exit 应用程序,如果没有任何内容 history 然后去 back history 如果有的话?请帮忙! - Lekhnath
即使您没有实现后退按钮侦听器,也只需要维护后退按钮历史记录。由于只存在一项活动,因此您只需按下后退按钮即可退出。你需要自己维护历史。示例:在移动到其他页面/视图时,继续将路径添加到全局数组,并在按下后退按钮时弹出元素 - SHANK
您也可以使用导航回来 history.go(-1) - Ian Jamieson


答案:


使用侦听器覆盖后退按钮后,它不会执行本机功能。您还必须实现退出行为。

在您的重写方法中,使用以下方法

document.addEventListener('backbutton', function(){
  if(menu is visible) {
       //Hide the menu
       //This is also working fine
   return false;
  }
  else //nothing is visible, exit the app
  {
    navigator.app.exitApp();
  }
});

希望有所帮助。


10
2017-09-25 08:26



我能改变一下吗? java 或者完全是 impossible? - Lekhnath
我不知道java中的确切可能性,但这是编程的基本规则,一旦你被覆盖,你需要在你自己的函数中实现完整的功能。 - SHANK
如果我需要手动完成,我怎么可能 exit 应用程序,如果没有任何内容 history 然后去 back history 如果有的话?请帮忙! - Lekhnath
即使您没有实现后退按钮侦听器,也只需要维护后退按钮历史记录。由于只存在一项活动,因此您只需按下后退按钮即可退出。你需要自己维护历史。示例:在移动到其他页面/视图时,继续将路径添加到全局数组,并在按下后退按钮时弹出元素 - SHANK
您也可以使用导航回来 history.go(-1) - Ian Jamieson


回答你的问题:

是document.addEventListener('backbutton',function(){});超过设备的后退按钮?如何摆脱它?

您还可以删除页面重定向上的事件侦听器,以继续使用后续页面中后退按钮的本机功能。删除事件侦听器的代码如下:

document.removeEventListener("backbutton", onBackButton, false); 其中onBackButton是与后退按钮事件关联的函数。


0
2017-12-26 09:11