Angular 7 Cordova 8 后退按钮覆盖不起作用

Angular 7 Cordova 8 backbutton override not working

我正在使用 Angular 7 和 Cordova 8 开发一个应用程序。我想覆盖 cordova 后退按钮事件,以通过添加事件侦听器来防止应用程序关闭,如 [=17] 中所述=]

我的代码如下所示:

let onDeviceReady = () => {
  enter code hereconsole.log("Bootstraping Module...")
  document.addEventListener("backbutton", (e) => {e.preventDefault(); e.stopPropagation(); console.log("backbutton"); return false;}, false);
  platformBrowserDynamic().bootstrapModule(AppModule);
};
document.addEventListener('deviceready', onDeviceReady, false);

根据文档,这应该可以防止应用程序关闭。我知道 preventDefaultstopPropagationreturn false 调用不是必需的,但我找到了我的问题的尽可能多的解决方案,但都没有用。

当我按下后退按钮时,我看到 backbutton 打印,但是,该应用程序仍在关闭。 在 Android.

上测试

更新:使用 logcat 调试问题后,当后退按钮被覆盖时,我可以看到在 CoreAndroid 插件 class 中记录的消息 WARNING: Back Button Default Behavior will be overridden. The backbutton event will be fired!在本机 Android 应用程序中。当我按下按钮时,应用程序仍然退出

更新:这个问题与OnsenUI有关,请看下面我的回答

我们在 app.component.ts ngOnInit

中传递了后退按钮逻辑
import {Renderer2} from '@angular/core';

constructor(private renderer: Renderer2){}

ngOnInit(){

  const devicebackbutton = this.renderer.listen('document', 'backbutton', e => {
      e.preventDefault();
      e.stopPropagation();
      return false;
  });
} 

我设法解决了这个问题。它不是由 Cordova 或 Angular 引起的,而是由我用于输入组件的 OnsenUI 引起的。 默认情况下,它会覆盖后退按钮的所有 cordova 处理程序,因为它提供了自己的功能。你可以阅读更多here