如何覆盖Cordova中的默认后退按钮操作?

时间:2017-06-08 17:39:03

标签: android cordova events event-handling

我已按照Cordova docs中的示例代码覆盖设备后退按钮(使用ES6),但它无法正常工作:

const onBackButtonPress = () => {
  console.log('pressed');
};
document.addEventListener('backbutton', onBackButtonPress, false);

当我在Android设备上运行应用程序时,我的覆盖代码会被调用,但应用程序也会退出,就好像还调用了默认的后退按钮操作一样。

如何在按下后退按钮时阻止应用退出?

我已尝试将e.preventDefault()添加到addEventListener

的回调函数中

我在deviceready事件被解雇后这样做。

我正在使用Cordova 7.0.1,我的平台是cordova-android 6.2.3

3 个答案:

答案 0 :(得分:1)

虽然这里的所有答案都是正确的,但在某些设备上它们仍然无法正常工作。我在Huawei P smart 2019上遇到了相同的问题,而在Huawei MediaPad T3上一切正常。在我的情况下,窗口焦点是问题,它在启动过程中的某个时候丢失了。

因此,正如其他人所建议的,请在设备就绪后添加以下内容: document.addEventListener('backbutton',()=> {},false);

此外,在Java插件启动后的某个时候(在启动屏幕之后): this.cordova.getActivity()。getWindow()。getDecorView()。requestFocus();

这也是Cordova在CordovaActivity.onResume中所做的。如果您的后退按钮在挂起并恢复应用后正常运行,但在此之前未正常运行,则应该可以解决您的问题。

答案 1 :(得分:0)

我在我的应用中使用此代码:

document.addEventListener("backbutton", function(e) {
    e.preventDefault();
    return;
}, false);

注意,在device is ready

时运行此代码

答案 2 :(得分:0)

我使用如下:



if(cordova.platformId === "android") {
  document.addEventListener("backbutton", function (event) {
    event.preventDefault();
    var confirmStatus = confirm("Do you want to exit?");
    if (confirmStatus === true) {
      navigator.app.exitApp();
    }
    }, false);
}