window.findWindow调用报错,但是没有报错信息,请问可能是哪些原因导致的

在aboutToAppear生命周期函数里,通过window.findWindow查找子窗口,这个报错是什么原因导致的。控制台也没有具体的报错信息。

HarmonyOS
2024-09-04 08:52:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

在本地最小demo中模拟了该错误场景,应该是子窗口还未被创建就调用了findWindow。具体demo如下:

// 在EntryAbility中创建了一个子窗口,未使用AppStorage保存windowStage在其他场景创建,这里只模拟最小场景 
let windowStage_: window.WindowStage | null = null; 
let sub_windowClass: window.Window | null = null; 
 
export default class EntryAbility extends UIAbility { 
  // 在onWindowStageCreate中调用该方法,创建子窗口 
  showSubWindow() { 
    // 1.创建应用子窗口。 
    if (windowStage_ )  { 
      windowStage_.createSubWindow("mySubWindow", (err: BusinessError, data) => { 
        let errCode: number = err.code; 
        if (errCode) { 
          return; 
        } 
        sub_windowClass = data; 
        // 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。 
        sub_windowClass.moveWindowTo(300, 300, (err: BusinessError) => { 
          let errCode: number = err.code; 
          if (errCode) { 
            return; 
          } 
        }); 
        sub_windowClass.resize(500, 500, (err: BusinessError) => { 
          let errCode: number = err.code; 
          if (errCode) { 
            return; 
          } 
        }); 
        // 3.为子窗口加载对应的目标页面。 
        sub_windowClass.setUIContent("pages/page3", (err: BusinessError) => { 
          let errCode: number = err.code; 
          if (errCode) { 
            console.error('Failed to load the content. Cause:' + JSON.stringify(err)); 
            return; 
          } 
          console.info('Succeeded in loading the content.'); 
          // 3.显示子窗口。 
          (sub_windowClass as window.Window).showWindow((err: BusinessError) => { 
            let errCode: number = err.code; 
            if (errCode) { 
              console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); 
              return; 
            } 
            console.info('Succeeded in showing the window.'); 
          }); 
        }

接上部分代码:

import window from '@ohos.window'; 
 
@Entry 
@Component 
struct Page01 { 
  @State message: string = 'Hello World'; 
 
  // 窗口大小被修改 
  aboutToAppear(): void { 
    window.findWindow('mySubWindow').resize(300,400) 
  } 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            // 子窗口被销毁 
            window.findWindow('mySubWindow').destroyWindow() 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
 
// 导出页面,在主页面中使用 
export default Page01

可以通过getSubWindow方法来获取所有已经被创建的子窗口, 拿到这个数组之后就可以通过数组的find、includes等方法来判断当前子窗口是否已经被创建了。API请参考: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-window-V5#getsubwindow9

分享
微博
QQ
微信
回复
2024-09-04 18:00:09
相关问题
HarmonyOS window.findWindow获取子窗口错误
440浏览 • 1回复 待解决
har 包引用报错问题
385浏览 • 1回复 待解决
编译报错没有堆栈信息
891浏览 • 1回复 待解决
如下代码报错报错原因是什么?
463浏览 • 1回复 待解决
导包报错,有人知道原因吗?
1164浏览 • 1回复 待解决
IDE如何获取更多报错信息
701浏览 • 1回复 待解决
Hsp间间接引用导致资源报错
1951浏览 • 1回复 待解决
查询应用信息方法编译报错
254浏览 • 1回复 待解决
拉起收银台报错,有人知道原因吗?
1591浏览 • 1回复 待解决
获取token失败,报错信息 get token fail
824浏览 • 1回复 待解决