自定义页面请求响应

2024-02-16 13:41 更新

Web组件支持在应用拦截到页面请求后自定义响应请求能力。开发者通过onInterceptRequest()接口来实现自定义资源请求响应 。自定义请求能力可以用于开发者自定义Web页面响应、自定义文件资源响应等场景。

Web网页上发起资源加载请求,应用层收到资源请求消息。应用层构造本地资源响应消息发送给Web内核。Web内核解析应用层响应信息,根据此响应信息进行页面资源加载。

在下面的示例中,Web组件通过拦截页面请求“https://www.example.com/test.html”,在应用侧代码构建响应资源,实现自定义页面响应场景。

  • 前端页面index.html代码。
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>example</title>
    6. </head>
    7. <body>
    8. <!-- 页面资源请求 -->
    9. <a href="https://www.example.com/test.html">intercept test!</a>
    10. </body>
    11. </html>
  • 应用侧代码。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview'
    3. @Entry
    4. @Component
    5. struct WebComponent {
    6. controller: web_webview.WebviewController = new web_webview.WebviewController()
    7. responseResource: WebResourceResponse = new WebResourceResponse()
    8. // 开发者自定义响应数据
    9. @State webdata: string = "<!DOCTYPE html>\n" +
    10. "<html>\n"+
    11. "<head>\n"+
    12. "<title>intercept test</title>\n"+
    13. "</head>\n"+
    14. "<body>\n"+
    15. "<h1>intercept test</h1>\n"+
    16. "</body>\n"+
    17. "</html>"
    18. build() {
    19. Column() {
    20. Web({ src: $rawfile('index.html'), controller: this.controller })
    21. .onInterceptRequest((event?: Record<string, WebResourceRequest>): WebResourceResponse => {
    22. if (!event) {
    23. return new WebResourceResponse();
    24. }
    25. let mRequest: WebResourceRequest = event.request as WebResourceRequest;
    26. console.info('TAGLee: url:'+ mRequest.getRequestUrl());
    27. //拦截页面请求,如果加载的url判断与目标url一致则返回自定义加载结果webdata
    28. if(mRequest.getRequestUrl() === 'https://www.example.com/test.html'){
    29. // 构造响应数据
    30. this.responseResource.setResponseData(this.webdata);
    31. this.responseResource.setResponseEncoding('utf-8');
    32. this.responseResource.setResponseMimeType('text/html');
    33. this.responseResource.setResponseCode(200);
    34. this.responseResource.setReasonMessage('OK');
    35. return this.responseResource;
    36. }
    37. return;
    38. })
    39. }
    40. }
    41. }
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号