HarmonyOS 鸿蒙Next 异步方法里router跳转到了subwindow里

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

HarmonyOS 鸿蒙Next 异步方法里router跳转到了subwindow里

entry里创建了全局悬浮窗(subwindow),进入APP,接口返回后用router跳转到下个界面,但是界面显示到了悬浮窗里,使用切换window焦点也无效,在界面上onclick点击跳转的话是正常跳转到主window里的,此时两个router对象是一样的。

2 回复

根据demo,原因是因为子窗口没有设置为不可获焦,所以当最上层的子窗口销毁之后,第二个子窗口自动获得了焦点,系统默认在子窗口上进行了弹窗操作。

可以通过设置子窗口为不可获焦状态,通过setWindowFocusable可以实现,可以参考以下demo

//FloatManager.ets
showSubWindow() {
  if (this.windowStage_ == null) {
    Log.error(TAG, 'Failed to create the subwindow. Cause: windowStage_ is null');
  } else {
    console.info('this.sub_windowClass.getWindowProperties().focusable = ' +
    this.sub_windowClass.getWindowProperties().focusable)
    this.sub_windowClass.setWindowFocusable(false).then(() => {
      console.info('this.sub_windowClass.getWindowProperties().focusable = ' +
      this.sub_windowClass?.getWindowProperties().focusable)
    })
  }
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#setwindowfocusable9-1

更多关于HarmonyOS 鸿蒙Next 异步方法里router跳转到了subwindow里的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next的开发环境中,异步方法里通过router跳转到subwindow是一个常见的需求。这种情况通常涉及到任务调度和UI更新的协调。

首先,确保你的异步方法是在合适的线程中执行的。鸿蒙系统对UI操作有严格的线程要求,所有UI相关的操作必须在主线程(UI线程)中执行。如果你的异步方法是在后台线程中运行的,你需要使用线程切换机制(如PostTask到UITaskDispatcher)来确保router跳转操作在主线程中执行。

其次,检查router跳转的目标subwindow是否已经正确注册和配置。在鸿蒙系统中,每个subwindow都需要在manifest文件中声明,并且需要配置正确的路由路径。确保你的跳转路径与manifest中配置的路径一致。

此外,还要检查跳转时传递的参数是否正确。如果参数有误或缺失,可能导致跳转失败或行为异常。

最后,如果以上步骤都确认无误,但问题依旧存在,可能是系统内部的bug或特定环境下的兼容性问题。此时,建议查看鸿蒙系统的官方文档和更新日志,看是否有相关的修复或说明。

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

回到顶部