HarmonyOS鸿蒙Next中tabs中包含webview,如何在外层控制H5页面返回?
HarmonyOS鸿蒙Next中tabs中包含webview,如何在外层控制H5页面返回? tabs嵌套页面包含webview,拦截tabs首页侧滑事件,判断H5页面是否有历史记录进行返回
-
对于webview页面,将webview实例封装。
webController: webview.WebviewController = new webview.WebviewController(); async aboutToAppear() { GlobalContext.getContext().setObject("PageWebController", this.webController) console.log("aboutToAppear.run()"); } -
对于最外层页面,调用webview实例
onBackPress(): boolean | void { let webview = GlobalContext.getContext().getObject("PageWebController") as webview.WebviewController if(webview){ console.log("webview.accessBackward():" + webview.accessBackward()) if(webview.accessBackward()){ webview.backward() return true; } else{ return false } } } -
GlobalContext 创建:
export class GlobalContext { private constructor() { } private static instance: GlobalContext; private _objects = new Map<string, Object>(); public static getContext(): GlobalContext { if (!GlobalContext.instance) { GlobalContext.instance = new GlobalContext(); } return GlobalContext.instance; } getObject(value: string): Object | undefined { return this._objects.get(value); } setObject(key: string, objectClass: Object): void { this._objects.set(key, objectClass); } }
更多关于HarmonyOS鸿蒙Next中tabs中包含webview,如何在外层控制H5页面返回?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,若tabs组件包含webview,可以通过WebViewController来控制H5页面的返回行为。具体步骤如下:
-
获取WebViewController:在加载H5页面时,通过
WebView组件的getWebviewController()方法获取WebViewController实例。 -
监听返回事件:在外层组件中监听返回事件,例如通过
onBackPress()方法。 -
调用返回方法:在返回事件中,通过
WebViewController的goBack()方法控制H5页面返回。如果H5页面没有历史记录可返回,则执行外层组件的返回逻辑。
示例代码片段:
import webview from '@ohos.web.webview';
let webviewController: webview.WebviewController;
// 获取WebViewController
webviewController = webview.getWebviewController();
// 外层返回事件处理
function onBackPress() {
if (webviewController.canGoBack()) {
webviewController.goBack();
} else {
// 执行外层返回逻辑
}
}
在HarmonyOS鸿蒙Next中,若需要在Tabs外层控制H5页面的返回操作,可以通过JavaScript与WebView的交互实现。具体步骤如下:
- WebView配置:在WebView中注入JavaScript接口,使H5页面能够与原生代码通信。
- JavaScript调用:在H5页面中,通过JavaScript调用原生方法,通知应用用户触发了返回操作。
- 原生控制:在原生代码中监听JavaScript的调用,当接收到返回通知时,调用WebView的
goBack()方法实现返回。
示例代码:
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void onBackPressed() {
((MainActivity) mContext).runOnUiThread(() -> webView.goBack());
}
}
在H5页面中调用:
Android.onBackPressed();
通过这种方式,可以在Tabs外层实现对H5页面返回的控制。

