HarmonyOS 鸿蒙Next webview拦截资源文件加载不生效
HarmonyOS 鸿蒙Next webview拦截资源文件加载不生效
我使用webview加载html片段,html片段中的图片需要进行basic认证才能加载,因此需要拦截图片自行添加header认证信息加载后返回给webview。
通过查阅文档,最终确定使用WebSchemeHandler拦截(onInterceptRequest只能拦截到整个html片段)
以下是我的代码,通过日志发现
- 图片下载成功但是设置didReceiveResponseBody没有任何效果
- 一旦返回true会导致webview滚动一段距离后不能滚动了
请帮忙解决,谢谢
Web({ src: '', controller: this.controller }).width('100%').layoutWeight(1)
.javaScriptAccess(true)
.imageAccess(true)
.onlineImageAccess(true)
.onControllerAttached(()=>{
this.controller.loadData(this.list!.news.artHtmlContent, "text/html", "utf-8","data")//加载html片段
this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => {
const type = request.getRequestResourceType()
if (type==webview.WebResourceType.IMAGE||type==webview.WebResourceType.MEDIA){ //拦截图片和视频资源
let httpRequest = http.createHttp()
httpRequest.request(request.getRequestUrl(),{ //添加header单独请求
method:http.RequestMethod.GET,
header:{ "Authorization" : "Basic bWFpcENsaWVudDpIYU1vYUAyMDI0"}
}).then((data)=>{
if (data?.responseCode == http.ResponseCode.OK){ //请求成功回填响应体
resourceHandler.didReceiveResponseBody(data.result as ArrayBuffer);
resourceHandler.didFinish();
}
})
return true
}
return false
})
this.controller.setWebSchemeHandler('http', this.schemeHandler);
})
更多关于HarmonyOS 鸿蒙Next webview拦截资源文件加载不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
更多关于HarmonyOS 鸿蒙Next webview拦截资源文件加载不生效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS鸿蒙Next webview拦截资源文件加载不生效的问题,可能的原因及解决方案如下:
-
Webview配置问题:
- 确认webview的相关配置是否正确,包括拦截策略的设置。检查是否有遗漏或错误的配置导致拦截不生效。
-
资源加载方式:
- 分析资源文件的加载方式,如果是异步加载或动态生成,可能需要特定的拦截策略。确保拦截逻辑能够覆盖所有加载方式。
-
版本兼容性:
- 检查当前使用的鸿蒙系统版本与webview组件的兼容性。有时新版本的系统或webview组件可能引入了新的行为或修复了旧版本的问题,导致原有的拦截策略失效。
-
权限问题:
- 确认应用是否具有访问和拦截网络资源的必要权限。缺少必要的权限可能导致拦截逻辑无法执行。
-
代码审查:
- 仔细检查webview拦截相关的代码实现,确保没有逻辑错误或遗漏。特别是拦截回调的处理逻辑,需要确保正确响应并处理拦截事件。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。他们将提供更专业的技术支持和解决方案。