HarmonyOS webInited这个事件有时候触发有时候不触发
import { webview } from '@kit.ArkWeb';
import {WebpageStatus,OffsetEnum, SpanEnum,ColumnEnum} from "../constants/CommonEnums"
import {CommonConstants} from "../constants/CommonConstants"
import Logger from "../utils/Logger"
import { FailureLayout } from './FailureLayout';
import { LoadingLayout } from './LoadingLayout';
import { TopNavigationView } from './TopNavigationView';
import { BusinessError } from '@kit.BasicServicesKit';
const TAG = '[WebView]';
// @Entry({ routeName: 'WebView' })
@Component
export struct WebView {
  onDestinationBack: () => boolean = () => false;
  handlePageEnd?: () => void;
  shouldShowExtBtn?: () => void;
  hiddenScrollBar?: boolean = false;
  url: string = '';
  name:string="";
  showHeader:boolean=true;
  isLarge?: boolean = true;
  @Link webViewController: webview.WebviewController;
  @State webStatus: WebpageStatus = WebpageStatus.INIT;
  @State ua: string = "";
  aboutToAppear() {
    this.webViewController = new webview.WebviewController();
    webview.WebviewController.setWebDebuggingAccess(true);
    webview.once('webInited', () => {
      try {
        // 应用侧用法示例,定制UserAgent。
        this.ua = this.webViewController.getUserAgent();
        this.webViewController.setCustomUserAgent(this.ua);
        Logger.info(TAG, 'webInited userAgent: ' + this.webViewController.getCustomUserAgent());
      } catch (error) {
        console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
      }
    })
  }
  build() {
    NavDestination() {
      GridRow({
        columns: this.isLarge ? { sm: ColumnEnum.SM, md: ColumnEnum.MD, lg: ColumnEnum.LG } : 1,
        gutter: {
          x: {
            sm: $r('app.float.xxl_padding_margin'),
            md: $r('app.float.md_padding_margin'),
            lg: $r('app.float.md_padding_margin')
          }
        },
        breakpoints: { reference: BreakpointsReference.ComponentSize }
      }) {
        GridCol({
          span: this.isLarge ? { sm: SpanEnum.SM, md: SpanEnum.MD, lg: SpanEnum.LG } : 1,
          offset: this.isLarge ? { sm: OffsetEnum.SM, md: OffsetEnum.MD, lg: OffsetEnum.LG } : 0
        }) {
          Column() {
            if(this.showHeader){
              TopNavigationView({ title: this.name, onDestinationBack: () => this.onDestinationBack() })
            }
            Stack() {
              Web({ controller: this.webViewController, src: this.url })
                .darkMode(WebDarkMode.Auto)
                .domStorageAccess(true)
                .zoomAccess(true)
                .fileAccess(true)
                .mixedMode(MixedMode.All)
                .cacheMode(CacheMode.None)
                .verticalScrollBarAccess(!this.hiddenScrollBar)
                .javaScriptAccess(true)
                .width(CommonConstants.FULL_PERCENT)
                .onProgressChange((event) => {
                  Logger.info(TAG, 'newProgress:' + event?.newProgress);
                  if (event?.newProgress === 100) {
                    this.shouldShowExtBtn && this.shouldShowExtBtn();
                  }
                  Logger.info(TAG, 'onProgressChange weburl: ' + this.webViewController.getUrl());
                })
                .onPageBegin(() => {
                  Logger.info(TAG, ' onPageBegin start loading');
                  Logger.info(TAG, 'onPageBegin weburl: ' + this.webViewController.getUrl());
                  Logger.info(TAG, 'onPageBegin userAgent: ' + this.webViewController.getCustomUserAgent());
                })
                .onErrorReceive(() => {
                  Logger.info(TAG, 'onErrorReceive: error');
                  this.webStatus = WebpageStatus.FINISHED;
                })
                .onPageEnd((event) => {
                  Logger.info(TAG, 'onPageEnd loading completed url: ' + event?.url);
                  Logger.info(TAG, 'onPageEnd weburl: ' + this.webViewController.getUrl());
                  if (this.webStatus != WebpageStatus.ERROR) {
                    this.webStatus = WebpageStatus.FINISHED;
                    this.handlePageEnd && this.handlePageEnd();
                  }
                })
              if (this.webStatus === WebpageStatus.INIT) {
                Column() {
                  LoadingLayout()
                }
                .backgroundColor(Color.White)
              }
              if (this.webStatus === WebpageStatus.ERROR) {
                Column() {
                  FailureLayout({
                    handleReload: () => {
                      this.webViewController.refresh();
                      this.webStatus = WebpageStatus.INIT;
                    }
                  })
                }
                .justifyContent(FlexAlign.Center)
                .alignItems(HorizontalAlign.Center)
                .backgroundColor(Color.White)
                .width(CommonConstants.FULL_PERCENT)
                .height(CommonConstants.FULL_PERCENT)
              }
            }
          }
        }
      }
      .layoutWeight(1)
    }
    .width("100%")
    .hideTitleBar(true)
    .onShown(() => {
    })
    .onHidden(() => {
    })
    .onBackPressed(() => this.onDestinationBack())
  }
}
根据日志来看,我多次运行程序,webInited这个事件为什么有时候触发有时候不触发,为啥?
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS want发送的时候有时候可以打开,有时候不行 
1004浏览  • 1回复 待解决
为什么XComponent有时候无法触发键盘的抬起事件 
1139浏览  • 1回复 待解决
HarmonyOS 自定义弹窗有时候能弹出,有时候弹不出 
1326浏览  • 1回复 待解决
HarmonyOS Web组件有时候会卡几秒或者很久白页,同一个页面有时候很快有时候会卡 
1041浏览  • 1回复 待解决
await有时候貌似不起作用 
461浏览  • 0回复 待解决
HarmonyOS PhotoSelectOptions属性preselectedUris有时候会设置无效 
1008浏览  • 1回复 待解决
有时候报错,有时候又报,汗…… 
1475浏览  • 1回复 待解决
HarmonyOS 首选项有时候存储会很慢,几秒钟或者更长 
846浏览  • 1回复 待解决
#鸿蒙学习大百科#在module.json5中配置权限时,为什么有时reason必填,有时候可以不填? 
1248浏览  • 1回复 待解决
Run entry方式运行APP有时候获取不到已经存储的Asset和首选项数据 
1494浏览  • 1回复 待解决
华为m30Pro升级鸿蒙后为什么有时候手机信号间歇性不好? 
8182浏览  • 1回复 待解决
#鸿蒙通关秘籍#为什么我有时候使用@Builder装饰器会直接报错呢?这个装饰器还有限制条件的吗? 
1313浏览  • 1回复 待解决
有时候我需要更新或替换一些库。 
1351浏览  • 1回复 待解决
HarmonyOS 位置权限访问弹窗是只有两个选项吗,看设置里面怎么有时候是三个,有个始终允许 
944浏览  • 1回复 待解决
HarmonyOS  非首次打开的webivew组件无法触发webInited事件 
675浏览  • 1回复 待解决
HarmonyOS  元服务卡片触发计时器是否有时间限制 
1140浏览  • 1回复 待解决
怎么说呢自从明白学习是孤独的我也清楚明白但是有时候觉得很累如何找到支撑自己的动力呢我 
4547浏览  • 1回复 待解决
HarmonyOS 使用nav模式关闭页面,aboutToDisappear生命周期异常慢,有时候调用pop方法后需要等待800ms才会执行到页面的aboutToDisappear生命周期 
769浏览  • 1回复 待解决
在用户点击组件a,a的onClick()方法被触发的时候组件b的onClick()方法也被触发,这个HarmonyOS能做到吗? 
1268浏览  • 1回复 待解决
HarmonyOS onBackPressed不触发 
905浏览  • 1回复 待解决
HarmonyOS 事件触发相关 
931浏览  • 1回复 待解决
onUnhandledException与onException回调分别什么时候触发 
2715浏览  • 1回复 待解决
HarmonyOS onKeyEvent 按钮不触发 
880浏览  • 1回复 待解决
HarmonyOS  navigation不触发onpageshow 
781浏览  • 1回复 待解决





















Navigation组件的页面跳转行为不会导致Web页面重新初始化,而webInited事件是Web组件的一个事件,用于在Web初始化完成时触发回调。其触发条件是当Web组件完成初始化过程后,会触发该事件。所以使用navigation跳转只有第一次打开这个webview页面的时候才会触发webInited的callback事件是正常的