【发布时间】:2017-12-06 12:25:07
【问题描述】:
我使用 Ionic 3 开发了一个 PWA(基于选项卡)。它工作正常,直到在 android 浏览器中按下硬件后退按钮或浏览器的后退按钮。如果它是从主屏幕运行,按硬件返回将关闭应用程序。如果应用程序在 android 中的 chrome 中运行(仅在 chrome 中测试),硬件背面或浏览器背面将重新加载 PWA 的第一页,而不是以前访问过的页面。如何在 Ionic 3 PWA 中处理这些事件?
我正在对所有页面使用延迟加载。
到目前为止我尝试了什么:
根据 jgw96 的评论 here,我认为 IonicPage 将自己处理导航。但它不起作用。
使用了 platform.registerBackButtonAction,但它不适用于 PWA。
根据下面 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, "");
});
}
}
}
【问题讨论】:
-
那么你在期待什么,我的意思是在浏览器或硬件后退按钮上的应用程序中应该发生什么?
-
如果我正在像 A->B->C 这样的页面导航,那么在 C 处的后按会弹出到 B。但在我的情况下,A 正在像新实例一样重新加载。
-
用您尝试过的内容更新您的问题
-
您能否发布您在 app.component.ts 中应用的更改的代码
-
@Webruster 请看代码,我已经贴出来了。