HarmonyOS鸿蒙Next中Web组件有无方式实现异步的请求拦截

HarmonyOS鸿蒙Next中Web组件有无方式实现异步的请求拦截 目前Web组件的onInterceptRequest是个同步方法,我们有这样一个场景:

对于包含关键字的请求,在原生侧进行缓存匹配,缓存命中则返回文件内容,否则开始下载,下载后返回。

安卓这边下载是可以同步执行的,但鸿蒙这边没有同步下载的方法。

请问有没有什么解决方式。

3 回复

看下这个Demo,获取到 fd之后在进行response返回

Web({ src: $rawfile('iframe.html'), controller: this.webviewController })
  .onInterceptRequest((event) => {
    if (event) {
      console.log('url123456:' + event.request.getRequestUrl())
    }

    const url = event!.request.getRequestUrl();

    console.log(url.endsWith(".jpg") + '123456')
    if (!url.endsWith(".jpg")) {
      return null;
    }
    try {
      let url2 = '';
      this.getFile(url2).then(fd => {
        this.responseweb.setResponseData(fd);
        this.responseweb.setResponseCode(200);
        this.responseweb.setReasonMessage('OK');
        this.responseweb.setResponseIsReady(true);
      });
      this.responseweb.setResponseMimeType('image/*');
      this.responseweb.setResponseIsReady(false);
      console.log(this.responseweb.getResponseData().toString + "123456")
      return this.responseweb;

    } catch (error) {
      return null
    }
  })

更多关于HarmonyOS鸿蒙Next中Web组件有无方式实现异步的请求拦截的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Web组件可以通过WebViewWebViewClient类来实现异步的请求拦截。具体来说,可以通过重写shouldInterceptRequest方法来拦截网络请求,并返回自定义的响应数据。该方法允许开发者在主线程之外处理请求,从而实现异步拦截。

示例代码如下:

import webview from '@ohos.web.webview';

class MyWebViewClient extends webview.WebViewClient {
    shouldInterceptRequest(webView: webview.WebView, request: webview.WebResourceRequest): webview.WebResourceResponse {
        // 在这里处理异步请求拦截逻辑
        // 例如,检查请求URL并返回自定义响应
        if (request.getUrl().toString().startsWith("https://example.com")) {
            return new webview.WebResourceResponse("text/html", "UTF-8", "Custom Response Data");
        }
        return null; // 返回null表示不拦截,继续正常请求
    }
}

let webView = new webview.WebView();
webView.setWebViewClient(new MyWebViewClient());

在这个例子中,shouldInterceptRequest方法会在每次网络请求时被调用,开发者可以在这里检查请求的URL,并根据需要返回自定义的响应数据。如果返回null,则表示不拦截该请求,WebView会继续正常的网络请求流程。这种方式可以在不阻塞主线程的情况下,实现异步的请求拦截。

在HarmonyOS鸿蒙Next中,Web组件可以通过WebViewonInterceptRequest方法实现异步请求拦截。该方法允许你在WebView发起请求时进行拦截,并可以自定义处理或修改请求。通过返回true,你可以阻止默认请求,并通过WebResourceResponse返回自定义数据,从而实现异步拦截和处理。这种方法适用于需要动态修改请求或响应的场景。

回到顶部