HarmonyOS 鸿蒙Next webview加载白屏,锁屏再打开恢复正常,请问是怎么回事
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加载白屏,锁屏再打开恢复正常的问题,这可能是由于以下原因导致的:
- 网络问题:网络异常或设备网络条件不佳可能导致webview加载网页内容时白屏。锁屏后再打开,设备可能重新尝试连接网络,从而恢复正常。
- 系统兼容问题:HarmonyOS系统可能与某些网页的兼容性存在问题,导致webview加载异常。锁屏后再打开可能触发了系统的重新加载机制,从而解决了兼容性问题。
- webview组件问题:webview组件自身可能存在bug或异常,导致加载网页时白屏。锁屏后再打开可能清除了组件的异常状态,从而恢复正常。
为了解决这个问题,您可以尝试更新HarmonyOS系统到最新版本,以修复可能存在的系统bug和兼容性问题。同时,也可以检查webview组件的配置和代码,确保已正确设置相关权限和属性。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html