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 
        }) 
    } 
  } 
}

【拦截】设置拦截策略,将按策略执行,下面样例替换成新的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 
        }) 
    } 
  } 
}
分享
微博
QQ
微信
回复
2024-08-23 15:19:47
相关问题
HarmonyOS 使用 api11 地图不显示
326浏览 • 1回复 待解决
HarmonyOS API11限制使用标准库
235浏览 • 1回复 待解决
如何查看ArkTS api11 版本变动?
1938浏览 • 1回复 待解决
api11 无相关方法
799浏览 • 1回复 待解决
API11编译har包可以在api10上使用吗
1811浏览 • 1回复 待解决
升级api11出现问题,该怎么解决啊?
931浏览 • 1回复 待解决
升级API11后h5页面字体变小了
1715浏览 • 1回复 待解决
官网哪可以下载到支持api11studio呢
796浏览 • 1回复 待解决
HarmonyOS api 11 Object.assign 会报红
27浏览 • 1回复 待解决
webviewoninterceptrequest调用异步操作
1911浏览 • 1回复 待解决