PhoneGap - 后退按钮上的android退出

hor*_*rin 41 back-button cordova

我正在尝试使用jquery mobile和cordova编写RSS阅读器.我的RSS阅读器由3页组成(在同一HTML文档中:第1页,第2页,第3页).我试图覆盖(硬件)后退按钮行为,因此它将退出程序.为了检查我在项目设置中没有犯任何错误,我使用了PhoneGap示例项目并将其加载到Eclipse中.每个示例函数都有效,所以我将index.html和res文件夹移动到phonegap示例.在我的index.html中,我导入了以下脚本:

<script src="res/jquery-1.7.1.min.js"></script>
<script src="res/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>
Run Code Online (Sandbox Code Playgroud)

和我的main.js文件看起来像这样:

document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
    e.preventDefault();
    navigator.app.exitApp();
}
else {
    navigator.app.backHistory()
}
}, false);
Run Code Online (Sandbox Code Playgroud)

您可以在第一个代码示例中检查我的脚本版本.关于如何让代码工作的任何想法,当我按下我的Xperia Arc上的后退按钮时,它会简单地退出应用程序?如果需要,我可以上传我的完整代码.

编辑:我已经测试了我的Android手机上的phonegap(cordova)哔声功能,它的工作方式,所以这没有什么与坏脚本实现.它必须是main.js文件中的内容.也许与jquerymobile后退按钮功能和phonegap后退按钮功能有一些兼容性问题.

mor*_*ner 85

您需要等待设备准备好添加事件侦听器:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if($.mobile.activePage.is('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory();
       }
    }, false);
}
Run Code Online (Sandbox Code Playgroud)

  • 调用`e.preventDefault`与否似乎没有什么区别 (4认同)
  • 谢谢你它现在正在运作.我使用过您的解决方案但没有e.preventDefault()代码. (3认同)
  • @igrek如何维护任何变量或使用堆栈/队列?我也在努力:-) (2认同)

Eti*_*Wan 12

如果您不想使用任何库,可以使用window.location.hash来获取应用程序所在的"面板".示例:

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
        if(window.location.hash=='#home'){
            e.preventDefault();
            navigator.app.exitApp();
        } else {
            navigator.app.backHistory()
        }
    }, false);
}
document.addEventListener("deviceready", onDeviceReady, false);
Run Code Online (Sandbox Code Playgroud)


mee*_*ick 7

如果您不想使用Jquery Mobile,请在@mornaner answer上将$ .mobile.activePage.is('#pagepage')更改为document.getElementById('#homepage'),如下面的代码所示:

document.addEventListener("deviceready",onDeviceReady,false);

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    document.addEventListener("backbutton", function(e){
       if(document.getElementById('#homepage')){
           e.preventDefault();
           navigator.app.exitApp();
       }
       else {
           navigator.app.backHistory()
       }
    }, false);
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,不需要为此目的下载Jquery Mobile乱码.此外,从JQuery mobile 1.4.0开始,不推荐使用activePage,并且将从1.5.0中删除.(使用pagecontainer小部件中的getActivePage()方法)