Я разработал PWA (на основе Tab) с использованием Ionic 3. Он работает нормально до тех пор, пока в браузере Android не будет нажата кнопка "Назад" или кнопка "Назад назад". Если он запускается с главного экрана, нажатие на аппаратную часть закроет приложение. Если приложение работает в режиме chrome в android (только проверено на хроме), аппаратная поддержка или обратная связь браузера перезагружают первую страницу PWA, а не ранее посещенную страницу. Как обрабатывать эти события в Ionic 3 PWA?
Я использую ленивую загрузку для всех страниц.
То, что я пробовал до сих пор:
-
В соответствии с комментарием jgw96 здесь, я думал, что IonicPage будет обрабатывать навигацию. Но это не работает.
-
Используется platform.registerBackButtonAction, но это не для PWA.
-
В соответствии с предложением Webruster ниже в ответах, попробовал код в 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, "");
});
}
}
}