Viv*_*nha 13 android ionic-framework
我使用Ionic 3开发了一个PWA(基于Tab).它在Android浏览器中按下硬件后退按钮或浏览器的后退按钮之前工作正常.如果它从主屏幕运行,按回硬件将关闭应用程序.如果应用程序在android中运行chrome(仅在chrome中测试),硬件返回或浏览器后面将重新加载PWA的第一页,而不是之前访问过的页面.如何在Ionic 3 PWA中处理这些事件?
我正在为所有页面使用延迟加载.
到目前为止我尝试了什么:
按照jgw96的评论在这里,我想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, "");
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
您已经提到您正在使用应用程序和浏览器中的硬件后退按钮,因此您没有明确提到在哪个阶段需要做什么,因此我想出了一个通用的解决方案,该解决方案在大多数情况下都非常有用
app.component.ts
platform.ready().then(() => {
// your other plugins code...
this.configureBkBtnprocess ();
});
Run Code Online (Sandbox Code Playgroud)
configureBkBtnprocess
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, "");
});
Run Code Online (Sandbox Code Playgroud)
解决方案2 尝试在准备就绪的平台中添加以下事件侦听器:
window.addEventListener('load', function() { window.history.pushState({}, '')
})
window.addEventListener('popstate', function() { window.history.pushState({},
'') })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2045 次 |
| 最近记录: |