HarmonyOS 鸿蒙Next webview加载html string 一直闪退
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
本地测试成功复现,原因就是你先拿到了html片段,但web组件还没有加载,这个时候您去load是会报错的,可以这样操作
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字符串时出现的闪退问题,可能的原因及解决方案如下:
-
资源限制:检查应用是否有足够的内存和资源来处理加载的HTML内容。大型或复杂的HTML页面可能导致内存溢出,从而引起闪退。
-
权限问题:确保应用已正确声明并获取了访问网络或加载本地资源的权限。权限不足可能导致webview无法正确加载内容而闪退。
-
WebView配置:检查WebView的配置是否正确。例如,是否正确设置了WebViewClient和WebChromeClient,这些类有助于处理页面加载过程中的各种事件。
-
HTML内容问题:验证HTML字符串是否有效,无语法错误。错误的HTML可能导致WebView解析失败而闪退。
-
系统兼容性:确认HTML内容和WebView的使用方式是否与当前鸿蒙系统版本兼容。不同版本的操作系统可能对WebView的行为有所改变。
-
错误日志:查看应用的错误日志,分析闪退时的异常堆栈信息,这可以提供更具体的错误原因。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,