HarmonyOS 鸿蒙Next web 拦截资源请求搭配异步的使用

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next web 拦截资源请求搭配异步的使用

web 拦截资源请求搭配异步的使用场景, 在web的onInterceptRequest系统方法中拦截请求url,然后去进行一系列的异步操作,当我在异步返回的结果中需要返回null时,应该如何处理。

例如如下代码,getFileContent是一个异步操作,我在then里面获取它的result,这个result是是null或者string类型的,如果 result是null,我想这个onInterceptRequest直接return null,但是现在已经return 了this.responseWeb对象,无法操作,我重新new一个WebResourceResponse也还是不行,请问该怎么操作

.onInterceptRequest((event?: IRequestIntercept) => {
const request = event?.request
const url = request?.getRequestUrl()
if (typeof url === ‘string’ && url.startsWith(FILE_PREFIX)) {
try {
this.getFileContent(url).then((result) => {
if (result === null) {
this.responseWeb = new WebResourceResponse()
this.responseWeb.setResponseMimeType(‘text/html’);
this.responseWeb.setResponseIsReady(true);
} else {
this.responseWeb.setResponseData(result);
this.responseWeb.setResponseEncoding(‘utf-8’);
this.responseWeb.setResponseMimeType(‘text/html’);
this.responseWeb.setResponseCode(200);
this.responseWeb.setReasonMessage(‘OK’);
this.responseWeb.setResponseIsReady(true);
}
})
this.responseWeb.setResponseMimeType(‘text/html’);
this.responseWeb.setResponseIsReady(false);
return this.responseWeb;
} catch (error) {
console.error(onInterceptRequest: ${error.code},Message: ${error.message});
return null
}
}
return null
}) 

2 回复
是需要返回值具体您的异步返回来确定吗?

可以试一下下方的demo:

import web_webview from '@ohos.web.webview'

@Entry

@Component

struct Demo {

controller: web_webview.WebviewController = new web_webview.WebviewController()

@State webdata: string = “<!DOCTYPE html>\n” +

“<html>\n”+

“<head>\n”+

“<title>intercept test</title>\n”+

“</head>\n”+

“<body>\n”+

“<h1>intercept test</h1>\n”+

“</body>\n”+

“</html>”

build() {

Column() {

Web({ src: www.baidu.com, controller: this.controller })

.onInterceptRequest((event) => {

try {

const responseweb = new WebResourceResponse();

this.getFile().then(result => {

if(result!==null) {

responseweb.setResponseData(this.webdata);

responseweb.setResponseCode(200);

responseweb.setReasonMessage(‘OK’)

responseweb.setResponseIsReady(true)

}

console.info(result);

});

responseweb.setResponseMimeType(‘text/html’);

responseweb.setResponseIsReady(false);

return responseweb;

} catch (error) {

console.info(‘error’);

return new WebResourceResponse();

}

})

}

}

getFile() {

return new Promise<string| null>((resolve, reject) => {

setTimeout(() => {

resolve(‘test’);

// resolve(null);

}, 3000);

});

}

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

在HarmonyOS鸿蒙Next中,关于web拦截资源请求搭配异步使用的操作,主要涉及WebView组件的onInterceptRequest方法以及异步编程技术。

WebView组件的onInterceptRequest方法可用于拦截Web页面的资源请求。通过此方法,开发者可以自定义资源请求的响应,实现如拦截本地文件、图片资源等功能。在拦截到请求后,如需异步处理请求(例如从网络加载资源),则可使用Promise或async/await等异步编程技术。

异步编程技术允许程序在等待某些操作(如网络请求)完成时,继续执行其他任务。在HarmonyOS中,Promise和async/await是处理异步操作的标准JS语法,它们提供了一种简洁的方式来编写异步代码。

开发者可以在onInterceptRequest的回调函数中,使用async/await来等待异步操作的结果,并根据结果构建WebResourceResponse对象,最终返回给WebView组件。

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

回到顶部