HarmonyOS 鸿蒙Next webview加载html string 一直闪退

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

HarmonyOS 鸿蒙Next webview加载html string 一直闪退

以下为代码:

/*
通用webview
*/
import web_webview from '@ohos.web.webview'
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct CommonWebViewPage {
  @State message: string = 'Hello World';
  controller: web_webview.WebviewController = new web_webview.WebviewController()

  @State mode: MixedMode = MixedMode.All
  @State params: Record<string,string> = router.getParams() as Record<string,string>; // 获取传递过来的参数对象

  aboutToAppear(): void {
    if(this.params['url'].toString().length > 1){
      //加载 url
      // this.controller.loadUrl(this.params['url']);
    }else{
      // this.controller.loadData(this.params['htmlstring'].toString(),"text/htm","UTF-8");
      this.loadFromHtmlString();
    }
  }

  loadFromHtmlString(){
    console.log("test ===", "html string == " + this.params['htmlstring'].toString());
    this.controller.loadData(
      "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
      "text/htm",
      "UTF-8",
      "",
      ""
    );
    // this.controller.loadUrl('https://www.baidu.com');
  }

  build() {
    Column(){
      Navigation() {

        if(this.params['url'].toString().length > 1) { //url长度不为空时,则加载url
          Web({ src: this.params['url'], controller: this.controller, renderMode: RenderMode.SYNC_RENDER }).mixedMode(this.mode).onlineImageAccess(true).zoomAccess(true).javaScriptAccess(true).domStorageAccess(true)
        }else{//
          Web({ src:'https://www.baidu.com', controller: this.controller, renderMode: RenderMode.SYNC_RENDER }).mixedMode(this.mode).onlineImageAccess(true).zoomAccess(true).javaScriptAccess(true).domStorageAccess(true)
        }

      }.title(this.params['title'].toString()).mode(NavigationMode.Auto).titleMode(NavigationTitleMode.Mini)
    }
  }
}

父页面传入的参数:

let paramsInfo : Record<string,string> = {
  'title': title,
  'url': "",
  'htmlstring':htmlstring,
};

运行逻辑:

父页面传入 htmlstring 参数,子页面加载htmlstring的内容。webview一直报错并闪退

Error message:Init error. The WebviewController must be associated with a Web component Error code:17100001


更多关于HarmonyOS 鸿蒙Next webview加载html string 一直闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

本地测试成功复现,原因就是你先拿到了html片段,但web组件还没有加载,这个时候您去load是会报错的,可以这样操作

参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#oncontrollerattached10

import web_webview from '@ohos.web.webview'
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct CommonWebViewPage {
@State message: string = 'Hello World';
controller: web_webview.WebviewController = new web_webview.WebviewController()
@State mode: MixedMode = MixedMode.All
@State params: Record<string, string> = router.getParams() as Record<string, string>; // 获取传递过来的参数对象

aboutToAppear(): void {
}

loadFromHtmlString() {
console.log("test ===", "html string == " + this.params['htmlstring'].toString());
this.controller.loadData("<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"
, "text/htm", "UTF-8", "", "");
// this.controller.loadUrl('https://www.baidu.com');
}

build() {
Column() {
Navigation() {
Web({
src: this.params['url'].toString().length > 1 ? this.params['url'] : 'https://www.baidu.com',
controller: this.controller,
renderMode: RenderMode.SYNC_RENDER
})
.onControllerAttached(() => {
if (this.params['url'].toString().length > 1) {
//加载 url
// this.controller.loadUrl(this.params['url']);
} else {
// this.controller.loadData(this.params['htmlstring'].toString(),"text/htm","UTF-8");
this.loadFromHtmlString();
}
})

.mixedMode(this.mode)
.onlineImageAccess(true)
.zoomAccess(true)
.javaScriptAccess(true)
.domStorageAccess(true)
}.title(this.params['title'].toString()).mode(NavigationMode.Auto).titleMode(NavigationTitleMode.Mini)
}
}
}

更多关于HarmonyOS 鸿蒙Next webview加载html string 一直闪退的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS鸿蒙Next中webview加载HTML字符串时出现的闪退问题,可能的原因及解决方案如下:

  1. 资源限制:检查应用是否有足够的内存和资源来处理加载的HTML内容。大型或复杂的HTML页面可能导致内存溢出,从而引起闪退。

  2. 权限问题:确保应用已正确声明并获取了访问网络或加载本地资源的权限。权限不足可能导致webview无法正确加载内容而闪退。

  3. WebView配置:检查WebView的配置是否正确。例如,是否正确设置了WebViewClient和WebChromeClient,这些类有助于处理页面加载过程中的各种事件。

  4. HTML内容问题:验证HTML字符串是否有效,无语法错误。错误的HTML可能导致WebView解析失败而闪退。

  5. 系统兼容性:确认HTML内容和WebView的使用方式是否与当前鸿蒙系统版本兼容。不同版本的操作系统可能对WebView的行为有所改变。

  6. 错误日志:查看应用的错误日志,分析闪退时的异常堆栈信息,这可以提供更具体的错误原因。

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

回到顶部