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

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next webview中loadUrl(this.url, headers)设置header一直失效 web组件在onControllerAttached回调里使用controller.loadUrl(this.url, headers)传递一些headers信息给h5,但用web调试Devtools没有查看到对应的headers,h5那边也没收到

2 回复

参考官网示例,本地验证可以拿到且设置header

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

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

更多关于HarmonyOS 鸿蒙Next webview中loadUrl(this.url, headers)设置header一直失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next webview组件的loadUrl(this.url, headers)方法用于加载网页并设置HTTP请求头。若你发现设置的header一直失效,可能的原因及处理方式如下:

  1. Header格式问题:确保你传递的headers参数是一个正确的Map对象,且键和值都是字符串类型,格式需符合HTTP标准。例如,{"User-Agent": "your_agent_string"}

  2. API限制:部分浏览器或webview组件可能对可设置的header有限制,特别是像CookieReferer等敏感或自动管理的header。检查文档确认哪些header是可自定义的。

  3. 版本兼容性:不同版本的鸿蒙系统或webview组件可能存在差异,确认你的开发环境(包括鸿蒙系统版本和webview组件版本)是否支持你尝试设置的所有header。

  4. 代码实现:检查loadUrl方法的调用上下文是否正确,确保this.urlheaders在调用时都已正确赋值且未被意外修改。

如果以上检查均无误但问题依旧存在,可能是由于系统内部的bug或未公开的限制。此时,你可以尝试简化代码至最小可复现问题的例子,并在鸿蒙开发者社区中搜索或询问,看是否有其他开发者遇到并解决了相同的问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部