HarmonyOS API11中Web部件的onInterceptRequest方法设计有问题

Web部件的onInterceptRequest的callback参数是一个函数, 其返回值类型是WebResourceResponse, 文档中说, 该函数返回null时, 代表不做拦截, 但是在api11中, 返回值类型不包含null时, 不能返回null, 从而无法按需拦截

HarmonyOS
2024-08-23 12:46:03
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

如果您需要进行拦截,那么您需要对WebResourceResponse重新定义,设置您的拦截策略。

如果不需要拦截,则直接返回null即可。

【不拦截】直接返回web中设置的网页

import web_webview from '@ohos.web.webview' 
 
@Entry 
@Component 
struct WebComponent { 
  controller: web_webview.WebviewController = new web_webview.WebviewController() 
  responseweb: WebResourceResponse = new WebResourceResponse(); 
  heads:Header[] = new Array() 
  @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.example.com', controller: this.controller }) 
        .onInterceptRequest((event) => { 
          if (event) { 
            console.log('url:' + event.request.getRequestUrl()) 
          } 
          return null 
        }) 
    } 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

【拦截】设置拦截策略,将按策略执行,下面样例替换成新的html

import web_webview from '@ohos.web.webview' 
 
@Entry 
@Component 
struct WebComponent { 
  controller: web_webview.WebviewController = new web_webview.WebviewController() 
  responseweb: WebResourceResponse = new WebResourceResponse() 
  heads:Header[] = new Array() 
  @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.example.com', controller: this.controller }) 
        .onInterceptRequest((event) => { 
          if (event) { 
            console.log('url:' + event.request.getRequestUrl()) 
          } 
          let head1:Header = { 
            headerKey:"Connection", 
            headerValue:"keep-alive" 
          } 
          let head2:Header = { 
            headerKey:"Cache-Control", 
            headerValue:"no-cache" 
          } 
          let length = this.heads.push(head1) 
          length = this.heads.push(head2) 
          this.responseweb.setResponseHeader(this.heads) 
          this.responseweb.setResponseData(this.webdata) 
          this.responseweb.setResponseEncoding('utf-8') 
          this.responseweb.setResponseMimeType('text/html') 
          this.responseweb.setResponseCode(200) 
          this.responseweb.setReasonMessage('OK') 
          return this.responseweb 
        }) 
    } 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
分享
微博
QQ
微信
回复
2024-08-23 15:19:47
相关问题
HarmonyOS API11限制使用标准库
1088浏览 • 1回复 待解决
HarmonyOS 使用 api11 地图不显示
1408浏览 • 1回复 待解决
如何查看ArkTS api11 版本变动?
2954浏览 • 1回复 待解决
api11 无相关方法
1662浏览 • 1回复 待解决
API11编译har包可以在api10上使用吗
2745浏览 • 1回复 待解决
升级api11出现问题,该怎么解决啊?
2142浏览 • 1回复 待解决
鸿蒙系统微内核设计有什么优势?
1094浏览 • 0回复 待解决
升级API11后h5页面字体变小了
2673浏览 • 1回复 待解决
官网哪可以下载到支持api11studio呢
1636浏览 • 1回复 待解决