HarmonyOS webview中loadUrl(this.url, headers)设置header一直失效

web组件在onControllerAttached回调里使用controller.loadUrl(this.url, headers)传递一些headers信息给h5,但用web调试Devtools没有查看到对应的headers,h5那边也没收到

HarmonyOS
2025-01-09 17:00:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#oninterceptrequest9

参考官网示例,本地验证后期,可以拿到header

import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct WebComponent {
  controller: webview.WebviewController = new 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: 'http://localhost:3000/login', controller: this.controller })
        .onInterceptRequest((event) => {
          if (event) {
            console.log('url:' + event.request.getRequestUrl());
          }
          if (event?.request.getRequestUrl().includes("login")) {
            return this.responseWeb
          }
          let head1: Header = {
            headerKey: "1123",
            headerValue: "123"
          }
          let head2: Header = {
            headerKey: "Cache-Control",
            headerValue: "no-cache"
          }
          let length = this.heads.push(head1);
          length = this.heads.push(head2);
          const promise: Promise<String> = new Promise((resolve: Function, reject: Function) => {
            this.controller.loadUrl("http://localhost:3000/login", this.heads)
            resolve("success");
          })

          promise.then(() => {
            console.log("prepare response ready");
            this.responseWeb.setResponseIsReady(true);
          })
          this.responseWeb.setResponseIsReady(false);
          return this.responseWeb;
        })
    }
  }
}

loadUrl方法header的headerKey值相同的字段是不分大小写的,同一次设置两个大小写不同,但headerKey字段相同的header,后一次的headerValue会覆盖前一次的,headerValue为空的情况在其他系统上也是不行的,会出现获取的header值错乱的现象,请尽量避免这个情况

分享
微博
QQ
微信
回复
2025-01-09 19:56:58
相关问题
HarmonyOS webview加载html string一直闪退
449浏览 • 1回复 待解决
HarmonyOS设置webview的请求头header
1271浏览 • 1回复 待解决
HarmonyOS WebView 圆角设置失效
444浏览 • 1回复 待解决
HarmonyOS 获取定位一直失败
442浏览 • 1回复 待解决
HarmonyOS 应用上架一直loading
271浏览 • 1回复 待解决
HarmonyOS IDE无法打开,一直崩溃
617浏览 • 1回复 待解决
http 请求一直报 2300058
2127浏览 • 0回复 待解决
HarmonyOS 终端运行ohpm一直报错
577浏览 • 1回复 待解决
HarmonyOS accessBackward方法一直返回true
331浏览 • 1回复 待解决
HamonyOS 设置webview的请求头header
898浏览 • 1回复 待解决
HarmonyOS Profiler TIme 一直是initializing
617浏览 • 1回复 待解决
HarmonyOS获取图片旋转值一直报错
877浏览 • 1回复 待解决
PolarDB控制台一直加载怎么回事?
3648浏览 • 1回复 待解决
配置OHPM代理一直不成功
1149浏览 • 1回复 待解决