如何在phonegap/cordova中检测Android后退按钮

如何在phonegap/cordova中检测Android后退按钮,android,jquery,cordova,jquery-mobile,Android,Jquery,Cordova,Jquery Mobile,我目前正在使用cordova 3.7.1。在我的应用程序中,我无法在jquery脚本中检测到硬件后退按钮。我试着这样做: $(文档).ready(函数(){ //注册后退按钮 document.addEventListener(“backbutton”,onBackKeyDown,false);}) 函数onBackKeyDown(e){ 警报(“按下后退按钮”);//如果按下android后退按钮,则发出警报 } 但这是行不通的。我已经尝试了所有的可能性 我还尝试使用 appView.getU

我目前正在使用cordova 3.7.1。在我的应用程序中,我无法在jquery脚本中检测到硬件后退按钮。我试着这样做:
$(文档).ready(函数(){
//注册后退按钮
document.addEventListener(“backbutton”,onBackKeyDown,false);})

函数onBackKeyDown(e){
警报(“按下后退按钮”);//如果按下android后退按钮,则发出警报
}

但这是行不通的。我已经尝试了所有的可能性

我还尝试使用

appView.getUrl()

但这不会返回div的url 如果我有一个div as#page2,它不会返回url

它只会回来。它不会回来了

我也在使用jquerymobile


在本机或Jquery端是否有处理android/硬件后退按钮的替代方案???

有两种解决方案:

1) 您需要在索引html文件的head部分的script标记中包含cordova.js,以使事件和插件正常工作

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>

您可能无法在文件夹中看到此文件,但phonegap | cordova命令在移动设备上运行时会生成此文件

2) 将代码修改为 使用特定于移动设备的事件以确保应用程序正常运行

阅读文档,您已经

您必须侦听deviceready事件,而不是文档就绪

<!DOCTYPE html>
<html>
  <head>
    <title>Back Button Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    // device APIs are available
    //
    function onDeviceReady() {
        // Register the event listener
        document.addEventListener("backbutton", onBackKeyDown, false);
    }

    // Handle the back button
    //
    function onBackKeyDown() {
    }

    </script>
  </head>
  <body onload="onLoad()">
  </body>
</html>

后退按钮示例
//等待加载设备API库
//
函数onLoad(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
}
//设备API可用
//
函数ondevicerady(){
//注册事件侦听器
document.addEventListener(“backbutton”,onBackKeyDown,false);
}
//按后退按钮
//
函数onBackKeyDown(){
}

以下内容在我们部署到cordova和web的应用程序中得到了应用,效果非常好

需要
窗口。_cordovanite=true
如果在cordova中

我在这里留下了处理代码的按钮作为示例(请参见“
//如果打开则关闭菜单”和其他注释),您需要用代码替换它们

把这个放在某个地方:

let bNH, bakNavHandler = bNH = {
    warningOpen: false,
    init: function(){
        if (window._cordovaNative)
            document.addEventListener('backbutton', this.onback, false);
        else {
            if (!window.performance || performance.navigation.type != 1)
                this.preventDefault();
            window.onpopstate =  this.onback;
        }
    },
    preventDefault: function(e){
        window._cordovaNative ? 
            e.preventDefault() : 
            window.history.pushState(null, '', window.location.href);
    },
    onback: function(e){
        // close menu if open
        if ($('#ekapp_menu_div').css('margin-right') == '-2px'){
            bNH.preventDefault(e)
            _that.hideMenuDiv();
        }
        // close modal if open
        else if (!bNH.warningOpen && $('#ekapp_modal:visible')[0]){
            bNH.preventDefault(e)
            _that.closeModal();
        }
        // prev screen if history
        else if (_that.history.length > 1) {
            bNH.preventDefault(e)
            _that.previousScreen();
        }
        // show close app warning
        else if (!bNH.warningOpen) {
            if (window._cordovaNative)
                bNH.preventDefault(e);
            _that.openModal('Tap back button again to exit app!');
            bNH.warningOpen = true;
            $('#ekapp_modal_buttons .ekapp_cancel_btn').one('click', function(){
                bNH.warningOpen = false;
                if (!window._cordovaNative)
                    bNH.preventDefault();
            });
        }
    }
};
然后在deviceready(cordova)或doc ready(web)初始化函数中执行以下操作:

bakNavHandler.init();

始终更喜欢使用移动本机事件。在
devicerady
event中绑定所有移动事件是一种很好的做法。代码不起作用,我尝试了类似的方法:
document.addEventListener('deviceready',函数(事件){document.addEventListener('backbutton',函数(e){//返回按钮事件警报时执行的逻辑(“返回按下”);},false)如果按下后退按钮,则显示警报。这是我的代码片段:
$(document).ready(函数(){document.addEventListener('backbutton',函数(e){//在后退按钮事件警报上执行的逻辑(“按下后退按钮”);},false);});
我正在本机端本身处理后退按钮事件。我没有使用OnBackKeyDown()。