HarmonyOS 鸿蒙Next 使用webview打开h5后,大部分的页面无法后退
HarmonyOS 鸿蒙Next 使用webview打开h5后,大部分的页面无法后退
使用webview打开大部分h5页面后,在页面里加载二级页面后,后退时无法退到一级页面,而是直接退出页面 代码如下:
build() {
Column() {
//标题栏
//CommonTitleBar({title:this.mTitle, maxLine:1});
//WebView
Row() {
Button({ type: ButtonType.Normal }) {
Image($r('app.media.hfx_title_android_ic_back_black_normal'))
.width(24)
.height(24)
}
.margin({
right: 20,
})
.backgroundColor(Color.Transparent)
.onClick(() => {
if (this.controller.accessBackward()) {
this.controller.backward()
} else {
router.back()
}
})
Text(this.mTitle)
.fontSize(18)
.fontWeight(FontWeight.Medium)
.fontColor('#25292E')
.layoutWeight(1)
.maxLines(1)
}
.padding({
left: 16,
right: 16,
})
.height(48)
Web({ src: this.mUrl, controller: this.controller })
.width("100%")
.layoutWeight(1)
.javaScriptAccess(true)
.cacheMode(this.mWebCacheMode)
.onClick(() => {
// this.mTitle = this.controller.getTitle();
})
.onResourceLoad((data: OnResourceLoadEvent) => {
Log.i(WebPage.TAG, "onResourceLoad");
})
.onInterceptRequest((event) => {
let header = event.request.getRequestHeader();
Log.i(WebPage.TAG, "onInterceptRequest=" + JSON.stringify(header));
return null;
})
.onControllerAttached(() => { //在控制器接入的时候,title尚拿不到。
Log.i(WebPage.TAG, "onControllerAttached,title=" + this.controller.getTitle());
//registerJavaScriptProxy注册后,必须调用refresh接口后生效,refresh会通知web组件刷新页面。所以在onPageBegin,onPageEnd中使用会导致不停刷新页面。可以在onControllerAttached方法中注册registerJavaScriptProxy并refresh。
// this.controller.loadUrl(this.mUrl);
this.controller.setCustomUserAgent(AppConstants.UA_OHOS); //暂时使用android的UA,很多工作台应用,目前不兼容鸿蒙UA
let ua = this.controller.getUserAgent();
Log.i(WebPage.TAG, "onControllerAttached, UA=" + ua + "#END");
this.controller.registerJavaScriptProxy(this.mJsProxy, "WebContainer", this.mJsProxy.getFunArray())
this.controller.refresh();
})
.onLoadIntercept((data: OnLoadInterceptEvent) => {
Log.i(WebPage.TAG, "onLoadIntercept,url:" + data.data.getRequestUrl() + ", isRedirect:" + data.data.isRedirect());
return false;
})
.onOverrideUrlLoading((webResourceRequest: WebResourceRequest) => {
//url拦截
Log.i(WebPage.TAG, "onOverrideUrlLoading, url:" + webResourceRequest.getRequestUrl() + ", isRedirect:" + webResourceRequest.isRedirect());
return false;
})
.onPageBegin((event: OnPageBeginEvent) => {
//pageBegin阶段,拿到的标题还是url。
// this.controller.forward();
Log.i(WebPage.TAG, "onPageBegin" + JSON.stringify(event));
})
.onPageEnd((data: OnPageEndEvent) => {
//onPageEnd的时刻,标题就可以确定了。
this.mTitle = this.controller.getTitle();
Log.i(WebPage.TAG, "onPageEnd," + this.mTitle);
})
.onPageVisible((data: OnPageVisibleEvent) => {
this.mTitle = this.controller.getTitle();
Log.i(WebPage.TAG, "onPageVisible," + this.mTitle);
})
.onTitleReceive((event: OnTitleReceiveEvent) => {
Log.i(WebPage.TAG, "onTitleReceive," + JSON.stringify(event));
this.mTitle = event.title;
})
.onErrorReceive(event => {
Log.i(WebPage.TAG, "onErrorReceive," + JSON.stringify(event));
})
.onSslErrorEvent(sslErrorEvent => { //证书错误
Log.i(WebPage.TAG, "onSslErrorEvent," + JSON.stringify(sslErrorEvent));
sslErrorEvent.handler.handleConfirm(); //Web组件返回的SSL错误通知事件用户处理功能对象,confirm即,通知Web组件继续使用SSL证书。
})/*.onHttpAuthRequest(event=>{//
Log.i(WebPage.TAG, "onHttpAuthRequest," + JSON.stringify(event));
return false;
})*/
.onClientAuthenticationRequest((event: OnClientAuthenticationEvent) => { //双向认证配置
Log.i(WebPage.TAG, "onClientAuthenticationRequest," + JSON.stringify(event));
})
.onPermissionRequest(event => { //webview请求权限。
Log.i(WebPage.TAG, "onPermissionRequest," + JSON.stringify(event));
})
//.onOverrideUrlLoading()
.domStorageAccess(true) //启用 window.localstorage
}
}
更多关于HarmonyOS 鸿蒙Next 使用webview打开h5后,大部分的页面无法后退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next 使用webview打开h5后,大部分的页面无法后退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,使用webview打开H5页面后,若遇到大部分页面无法后退的问题,可能是由于webview的导航堆栈管理不当或H5页面的特定逻辑导致。
-
检查webview后退方法:确保在调用webview的
goBack()
或类似方法时,webview的堆栈中确实存在可回退的页面。可以通过canGoBack()
方法先判断是否可以后退。 -
H5页面逻辑:确认H5页面是否有重写或拦截后退按钮的逻辑,如使用
window.history.pushState
和window.history.replaceState
等API影响历史记录。 -
页面加载方式:检查webview加载H5页面的方式,如使用
loadUrl
或loadDataWithBaseURL
等方法时,确保URL或数据格式正确,避免加载不完整或错误的页面导致无法后退。 -
系统兼容性:考虑HarmonyOS系统的版本差异,确保webview组件与当前系统版本兼容。
-
日志与调试:开启webview的调试模式,查看加载H5页面时的日志输出,检查是否有错误或警告信息。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html