HarmonyOS 鸿蒙Next webview加载白屏,锁屏再打开恢复正常,请问是怎么回事

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

HarmonyOS 鸿蒙Next webview加载白屏,锁屏再打开恢复正常,请问是怎么回事

webview加载白屏,锁屏再打开就能正常加载出来了,请问是怎么回事

2 回复

registerJavaScriptProxy注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用refresh接口生效。

参考demo:

@Component
export struct WebView {
  url: string = '';
  urlIntercept?: (url: string) => void
  @Link webviewController: webview.WebviewController;
  @Link title: string;
  @State showProgress: boolean = true;
  @State progress: number = 0;
  // 声明需要注册的对象
  @State jsProxy: JSProxy = new JSProxy(this.webviewController);
  methodList: string[] = ['getInfo']

  build() {
    Column() {
      if (this.showProgress) {
        Progress({ value: this.progress, total: 100, type: ProgressType.Linear })
          .width(Constants.FULL_PERCENT)
          .height(2)
          .color('#69C979')
          .backgroundColor(Color.White)
      }
      Web({
        src: '',
        controller: this.webviewController
      })
        .onControllerAttached(() => {
          this.webviewController.loadUrl(this.url)
          this.webviewController.registerJavaScriptProxy(this.jsProxy, 'jsProxy', this.methodList)
          this.webviewController.refresh();
        })
        .javaScriptAccess(true)
        .databaseAccess(true).domStorageAccess(true)
        .fileAccess(true)
        .imageAccess(true)
        .onlineImageAccess(true)
        .mixedMode(MixedMode.All)
        .onTitleReceive((event) => {
          if (event) {
            this.title = event.title;
          }
        })
        .onProgressChange((event) => {
          if (event) {
            this.progress = event.newProgress;
            this.showProgress = !(event.newProgress == 100)
          }
        })
        .onLoadIntercept((event) => {
          let requestUrl = event.data.getRequestUrl()
          if (RegExpUtil.isUrl(requestUrl)) {
            let url: string = this.handleUrl(requestUrl)
            if (url !== this.handleUrl(this.url)) {
              this.urlIntercept && this.urlIntercept(url)
              return true
            }
          }
          return false
        })
    }
    .width(Constants.FULL_PERCENT)
    .height(Constants.FULL_PERCENT) }

  handleUrl(url: string): string {
    url = url.replace("http://", "").replace("https://", "");
    // 去掉最后的多余/
    if (url.endsWith("/")) {
      url = url.slice(0, -1);
    }
    return url
  }
}

export class JSProxy {
  private webviewController: webview.WebviewController

  constructor(webviewController: webview.WebviewController) {
    this.webviewController = webviewController
  }
  getInfo(): string {
    return 'test'
  }
}

针对您提到的HarmonyOS 鸿蒙Next webview加载白屏,锁屏再打开恢复正常的问题,这可能是由于以下原因导致的:

  1. 网络问题:网络异常或设备网络条件不佳可能导致webview加载网页内容时白屏。锁屏后再打开,设备可能重新尝试连接网络,从而恢复正常。
  2. 系统兼容问题:HarmonyOS系统可能与某些网页的兼容性存在问题,导致webview加载异常。锁屏后再打开可能触发了系统的重新加载机制,从而解决了兼容性问题。
  3. webview组件问题:webview组件自身可能存在bug或异常,导致加载网页时白屏。锁屏后再打开可能清除了组件的异常状态,从而恢复正常。

为了解决这个问题,您可以尝试更新HarmonyOS系统到最新版本,以修复可能存在的系统bug和兼容性问题。同时,也可以检查webview组件的配置和代码,确保已正确设置相关权限和属性。

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

回到顶部