Phonegap-2.10:硬件后退按钮无法正常工作

Posted

技术标签:

【中文标题】Phonegap-2.10:硬件后退按钮无法正常工作【英文标题】:Phonegap-2.10 : Hardware back button not working properly 【发布时间】:2012-10-11 10:36:12 【问题描述】:

我正在使用 phonegap-1.3.0 和 android-4.0.3 开发一个应用程序。下面是我的代码:

function home()    
document.removeEventListener("backbutton", handleBackButton, false);
document.addEventListener("backbutton", handleBackButtonOnHome, false);


function edit() 
document.removeEventListener("backbutton", handleBackButtonOnHome, false);   document.addEventListener("backbutton", handleBackButton, false);


function handleBackButton() 
console.log("Back Button Pressed!");
home();


function handleBackButtonOnHome() 
console.log("Back Button Pressed in home!");
navigator.app.exitApp();

点击编辑页面上的硬件后退按钮将用户带到主页,当在主页上时,应用程序按照事件处理程序的指定退出。该应用程序在指定的设置(配置)上运行良好。

最近我升级到cordova-2.1.0,点击编辑页面上的后退按钮会退出应用程序,而不是将用户带到主页。

请注意:我已经尝试了我的方法,但似乎没有任何效果,navigator.app.backHistory()history.back()

欢迎任何帮助..

【问题讨论】:

【参考方案1】:

在我的环境中寻找解决此问题的方法时(PhoneGap 中的 Sencha Touch 2,请参阅 Andreas Sommer 的说明 here),我通过将以下代码添加到我的 index.html HEAD 部分来修复:

<!-- handle android hardware back button -->
<script type="text/javascript" charset="utf-8">
    document.addEventListener("deviceready", function() 
        document.addEventListener("backbutton", function() 
            if (Ext.getCmp('mainview').pop(1) == null) 
                Ext.Msg.confirm("Exit", "Do you want to Exit?", function(e) 
                    if (e == 'yes') 
                        navigator.app.exitApp();
                    
                );
            
            else 
                return false;
            
        , false);
    , false);
</script>

仅供参考,“mainview”组件是一个 Ext.navigation.View,我从堆栈中弹出当前视图。如果 pop() 返回 null 那么我们就在主视图中。

这适用于 Gingerbread 和 ICS,但不适用于 Jelly Bean。为了让它与 Jelly Bean 一起工作,我需要从 PhoneGap 下 AndroidManifest.xml 文件的标签中删除 android:targetSdkVersion="17" 属性。

所有这些都只适用于 PhoneGap。当我在 Sencha Touch 而不是 PhoneGap 下生成 .apk 时,硬件后退按钮没有被捕获。

【讨论】:

【参考方案2】:

感谢您查看问题。 我通过添加以下行解决了这个问题

document.addEventListener("backButton", backPressed, false);

在 onDeviceReady() 函数中。并使用标志变量在这样的页面之间导航,

function backPressed() 
alert('backPressed');   
if(gAppControl.pageFlag == true)
home();
else
navigator.app.exitApp();        

问候, 七无

【讨论】:

以上是关于Phonegap-2.10:硬件后退按钮无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

React-Native:按下 android 硬件后退按钮返回

如何使后退按钮从第二帧工作到第一帧

你如何让 VideoCastControllerActivity 上的硬件后退按钮工作?

ionic 4 防止/禁用设备硬件后退按钮

在 Ionic 应用程序中禁用硬件后退按钮?

带有 Webview 的片段利用硬件后退按钮转到上一个网页