gpt4 book ai didi

android - 如何处理使用 Ionic3 开发的 PWA 中的硬件后退按钮

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:00 24 4
gpt4 key购买 nike

我使用 Ionic 3 开发了一个 PWA(基于 Tab)。它工作正常,直到在 Android 浏览器中按下硬件后退按钮或浏览器的后退按钮。如果它从主屏幕运行,按下硬件后退将关闭应用程序。如果应用程序在 android 的 chrome 中运行(仅在 chrome 中测试),硬件返回或浏览器的返回将重新加载 PWA 的第一页,而不是之前访问过的页面。如何在 Ionic 3 PWA 中处理这些事件?

我对所有页面都使用延迟加载。

到目前为止我尝试了什么:

  1. 根据 jgw96 的评论 here ,我认为 IonicPage 会自行处理导航。但它不起作用。

  2. 使用了 platform.registerBackButtonAction,但不适用于 PWA。

  3. 按照 Webruster 在下面 Answers 中的建议,尝试了 app.component.ts 中的代码。但没有变化。

邮寄代码:

    import { Component, ViewChild } from '@angular/core';
import { Nav, Platform, AlertController, Alert, Events, App, IonicApp, MenuController } from 'ionic-angular';

@Component({
templateUrl: 'app.html'
})
export class MyApp {
@ViewChild(Nav) nav: Nav;
rootPage:any = 'TabsPage';
constructor(public platform: Platform,
public alertCtrl: AlertController, public events: Events,
public menu: MenuController,
private _app: App,
private _ionicApp: IonicApp) {

platform.ready().then(() => {
this.configureBkBtnprocess ();
});
}

configureBkBtnprocess() {
if (window.location.protocol !== "file:") {
window.onpopstate = (evt) => {
if (this.menu.isOpen()) {
this.menu.close ();
return;
}
let activePortal = this._ionicApp._loadingPortal.getActive() ||
this._ionicApp._modalPortal.getActive() ||
this._ionicApp._toastPortal.getActive() ||
this._ionicApp._overlayPortal.getActive();

if (activePortal) {
activePortal.dismiss();
return;
}

if (this._app.getRootNav().canGoBack())
this._app.getRootNav().pop();
};

this._app.viewDidEnter.subscribe((app) => {
history.pushState (null, null, "");
});
}
}
}

最佳答案

您已经提到您正在使用应用程序和浏览器中的硬件后退按钮,所以您没有清楚地提到在什么阶段需要做什么,所以我想出了一个通用的解决方案,它在大多数情况下都很有用案例

app.component.ts

platform.ready().then(() => {

// your other plugins code...
this.configureBkBtnprocess ();

});

配置BkBtn进程

private configureBkBtnprocess () {

// If you are on chrome (browser)
if (window.location.protocol !== "file:") {

// Register browser back button action and you can perform
// your own actions like as follows
window.onpopstate = (evt) => {

// Close menu if open
if (this._menu.isOpen()) {
this._menu.close ();
return;
}

// Close any active modals or overlays
let activePortal = this._ionicApp._loadingPortal.getActive() ||
this._ionicApp._modalPortal.getActive() ||
this._ionicApp._toastPortal.getActive() ||
this._ionicApp._overlayPortal.getActive();

if (activePortal) {
activePortal.dismiss();
return;
}

// Navigate back
if (this._app.getRootNav().canGoBack())
this._app.getRootNav().pop();

}
else{
// you are in the app
};

// Fake browser history on each view enter
this._app.viewDidEnter.subscribe((app) => {
history.pushState (null, null, "");
});

解决方案 2尝试在准备好的平台中添加这些事件监听器:

 window.addEventListener('load', function() { window.history.pushState({}, '') 
})
window.addEventListener('popstate', function() { window.history.pushState({},
'') })

关于android - 如何处理使用 Ionic3 开发的 PWA 中的硬件后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47674266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com