.onInterceptRequest((event)=>{
if (!event) {
return;
}
// 此处匹配自己想要加载的本地离线资源,进行资源拦截替换,绕过跨域
Logger.warn(TAG, `getRequestUrl:${event.request.getRequestUrl()}`)
if (this.schemeMap.has(event.request.getRequestUrl())) {
let rawfileName: string = this.schemeMap.get(event.request.getRequestUrl())!;
let mimeType = this.mimeTypeMap.get(rawfileName);
if (typeof mimeType === 'string') {
let response = new WebResourceResponse();
// 构造响应数据,如果本地文件在rawfile下,可以通过如下方式设置
response.setResponseData($rawfile(rawfileName));
response.setResponseEncoding('utf-8');
response.setResponseMimeType(mimeType);
response.setResponseCode(200);
response.setReasonMessage('OK');
response.setResponseIsReady(true);
response.setResponseHeader(event.request.getRequestHeader())
Logger.warn(TAG, `getRequestUrl ==> rawfileName:${rawfileName} ResponseData:${response.getResponseData()} ReasonMessage:${response.getReasonMessage()} ResponseMimeType:${response.getResponseMimeType()}`)
return response;
}
}
return null
})
日志打印为:
08-26 16:51:13.090 30028-30028 A03D00/JSAPP xxx I [INFO ] 2024-08-26 16:51:13,090 [Logger:97] [["[WebView]","getRequestUrl ==> rawfileName:uni/xxx.uni.carList/package.json ResponseData: ReasonMessage:OK ResponseMimeType:text/plain"]]
前端请求到的resonse为空,实际应该是个文件。
可以将前端资源文件放在resfile目录下,设置允许跨域访问的目录。resfile文件夹需要在resource目录下新建,目录中的资源文件会被直接打包进应用,不经过编译,可解决跨域问题。
文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5\#setpathallowinguniversalaccess12