HarmonyOS鸿蒙Next中想要实现一个全局切换页面触发事件,事件内遍历当前切换到的页面所有文本,能实现么?

HarmonyOS鸿蒙Next中想要实现一个全局切换页面触发事件,事件内遍历当前切换到的页面所有文本,能实现么? 需要实现一个 切换页面 监听事件
每次切换页面就便利当前页面上的文本
并根据文本找到对应UI并计算出 此UI位于页面的坐标和宽高 可以实现么?
或者鸿蒙有什么试别文字位置的方法么?

IOS和安卓我用的都是通过文字计算,现在该做鸿蒙了,找了很多资料没有办法实现,请教一下各位老师
鸿蒙应该怎么实现,或者鸿蒙有别的更好的方式 获取 敏感信息的坐标和宽高么?
想实现一个 页面敏感信息识别

6 回复

实现思路: 楼主可以通过 uiObserver.on(‘routerPageUpdate’) 接口监听页面状态变化,触发敏感信息扫描逻辑;利用 onAreaChange 回调监听组件区域变化,获取文本组件的全局坐标和宽高;结合文本内容与其位置信息,通过自定义算法实现敏感信息标记或拦截。

实现步骤

1/ 监听页面切换事件

// 全局注册页面状态监听

import { uiObserver } from '@kit.ArkUI';

uiObserver.on('routerPageUpdate', (pageInfo) => {

  if (pageInfo.status === 'Shown') {

    // 触发敏感信息扫描

    scanSensitiveInfo();

  }

});

2/ 通过自定义高阶组件包装 Text,动态添加区域监听:

@Component

struct SensitiveText {

  @State private content: string;

  @State private pos: { x: number, y: number, width: number } = { x: 0, y: 0, width: 0 };

  build() {

    Text(this.content)

      .onAreaChange((oldVal, newVal) => {

        this.pos = {

          x: newVal.globalPosition.x,

          y: newVal.globalPosition.y,

          width: newVal.width

        };

        // 存储到全局管理类

        SensitiveManager.recordPosition(this.content, this.pos);

      })

  }

}

3/ 敏感信息处理逻辑

class SensitiveManager {

  static scanSensitiveInfo() {

    const textPositions = this.getRecordedPositions();

    textPositions.forEach((item) => {

      if (isSensitive(item.content)) {

        highlightArea(item.pos); // 高亮敏感区域

      }

    });

  }

}

更多关于HarmonyOS鸿蒙Next中想要实现一个全局切换页面触发事件,事件内遍历当前切换到的页面所有文本,能实现么?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主是不是想做一个脚本,类是于android 通过 adb中的 uiautomator 获取app中的布局信息。

如果你使用的是 Navigation 组件导航,可以使用路由拦截

NavPathStack提供了setInterception方法,用于设置Navigation页面跳转拦截回调。该方法需要传入一个NavigationInterception对象,该对象包含三个回调函数:

this.pageStack.setInterception({
  willShow: (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar",
    operation: NavigationOperation, animated: boolean) => {
    if (typeof to === "string") {
      console.log("target page is navigation home page.");
      return;
    }
    // 将跳转到PageTwo的路由重定向到PageOne
    let target: NavDestinationContext = to as NavDestinationContext;
    if (target.pathInfo.name === 'PageTwo') {
      target.pathStack.pop();
      target.pathStack.pushPathByName('PageOne', null);
    }
  }
})

不好意思刚才我描述的不全面,后面补充了一下,我希望实现一个页面敏感信息识别,ios和安卓我都是用的通过文字找到对应ui 计算ui位于当前页面的定位和宽高 实现。鸿蒙有办法可以实现么?

在HarmonyOS Next中,可以通过页面生命周期回调或路由观察者实现全局页面切换事件监听。使用window.onrouter模块监测页面变化,切换后可通过getElement或组件Ref获取当前页面根节点,递归遍历所有文本内容。需注意性能及隐私合规限制,部分系统级页面可能无法访问。

在HarmonyOS Next中,可以通过页面生命周期和组件布局事件监听实现全局页面切换触发。使用@WatchonPageShow监听页面切换,结合getInspectorByKey或自定义组件ID遍历文本节点。通过measure方法可获取UI组件的坐标和宽高,但需注意性能及隐私合规要求。建议使用官方推荐的组件查询和布局计算API替代直接文本识别,以提升准确性和兼容性。

回到顶部