HarmonyOS 鸿蒙Next:首页Tabs嵌套Tabs内网页返回监听方法 如何在首页监听Tabs嵌套中网页的返回?我需要在onBackPressed中判断是关闭整个页面还是仅返回网页。目前使用navigator路由

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:首页Tabs嵌套Tabs内网页返回监听方法
如何在首页监听Tabs嵌套中网页的返回?我需要在onBackPressed中判断是关闭整个页面还是仅返回网页。目前使用navigator路由

首页是Tabs嵌套Tabs,Tabs里面有一个网页,如何在首页监听网页的返回? 需要在onBackPressed判断是关闭页面还是网页返回。 目前我用的是navigator路由

2 回复
  1. 通过 accessBackward 判断当前web页面是否还有历史记录,有则返回,没有则关闭。

    https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#accessbackward

    描述中《如何在首页监听网页返回》,这个一般是放到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);
      }
    }
    

    监听H5页面是否有历史记录,并且操作返回,需要控制每个对应的WebviewController实例,需要在业务层自行处理。

    webview的支持情况就是对单个实例操作。

更多关于HarmonyOS 鸿蒙Next:首页Tabs嵌套Tabs内网页返回监听方法 如何在首页监听Tabs嵌套中网页的返回?我需要在onBackPressed中判断是关闭整个页面还是仅返回网页。目前使用navigator路由的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,处理首页Tabs嵌套中网页的返回监听,通常涉及到自定义组件和路由管理。以下是实现这一功能的基本思路:

  1. 自定义Tabs组件: 确保你的Tabs组件能够接收并处理内部网页的返回事件。这可能需要你在Tabs组件中增加事件监听机制,以便捕获到网页的返回动作。

  2. 网页组件的返回事件: 在嵌套网页的组件中,通过监听网页的返回按钮(通常是浏览器自带的返回功能)或自定义返回按钮的点击事件,触发一个自定义事件,该事件携带足够的信息以表明是网页返回动作。

  3. 事件传递: 将上述自定义事件从网页组件传递到Tabs组件,再进一步传递到首页组件。这通常涉及到事件冒泡机制或自定义事件总线。

  4. 在onBackPressed中处理: 在首页的onBackPressed方法中,根据接收到的事件类型(网页返回或页面关闭请求),决定是执行网页返回操作还是关闭整个页面。

  5. 路由管理: 利用navigator路由管理,确保网页返回和页面关闭的操作能够正确执行,同时保持应用状态的一致性。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部