HarmonyOS 统一设置webview的请求头header

想在onLoadIntercept回调中用loadurl统一设置请求头,通过用event.data.getRequestHeader()获取header判断是否调用loadurl,但是获取的header一直为空数组。由于无法判断调用loadurl方法的时机,就会造成死循环。

import web_webview from '@ohos.web.webview'; 
 
@Entry 
@Component 
struct MainPage { 
  @State webViewController: web_webview.WebviewController = new web_webview.WebviewController(); 
 
  build() { 
    Row() { 
      Column() { 
        WebView({controller: $webViewController}) 
 
        Button('跳转') 
          .onClick(() => { 
            this.webViewController.loadUrl('www.bilibili.com') 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
 
@Component 
export struct WebView { 
  @Link controller: web_webview.WebviewController; 
  @State url: string = 'www.huawei.com'; 
 
  build() { 
    Web({ controller: this.controller, src: '' }) 
      .domStorageAccess(true) 
      .onControllerAttached(() => { 
        this.controller.loadUrl(this.url); 
      }) 
      .onLoadIntercept(event => { 
        if (event.data.getRequestHeader().length) { 
          return false; 
        } else { 
          const header: Header[] = [{ headerKey: 'Token', headerValue: '123456789' }]; 
          this.controller.loadUrl(this.url, header); 
          return true; 
        } 
      }) 
  } 
}
HarmonyOS
2024-09-05 12:46:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

建议通过onInterceptRequest获取header,示例代码如下:

import web_webview from '@ohos.web.webview'; 
@Entry 
@Component 
struct MainPage { 
  @State webViewController: web_webview.WebviewController = new web_webview.WebviewController(); 
  build() { 
    Row() { 
      Column() { 
        Button('跳转') 
          .onClick(() => { 
            const header: Header[] = [{ headerKey: 'test', headerValue: '1234567890' }]; 
            this.webViewController.loadUrl('https://www.huawei.com', header) 
          }) 
        WebView({controller: $webViewController}) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
 
@Component 
export struct WebView { 
  @Link controller: web_webview.WebviewController; 
  @State url: string = 'https://www.huawei.com'; 
  @State header: string = ''; 
  responseweb: WebResourceResponse = new WebResourceResponse() 
  build() { 
    Column(){ 
      Text(this.header); 
      Web({ controller: this.controller, src: '' }) 
        .domStorageAccess(true) 
        .onControllerAttached(() => { 
          const header: Header[] = [{ headerKey: 'test', headerValue: '123456789' }]; 
          this.controller.loadUrl('https://www.huawei.com', header) 
        }) 
        .onInterceptRequest(event => { 
          console.log('23232') 
          console.log(String(event?.request.getRequestHeader().some(item=>(item.headerKey === 'test' && item.headerValue === '123456789')))) 
          this.header = JSON.stringify(event?.request.getRequestHeader()); 
          const isExist: boolean = event?.request.getRequestHeader().some(item=>(item.headerKey === 'test' && item.headerValue === '123456789')) || false; 
          if(isExist){ 
            this.header = JSON.stringify(event?.request.getRequestHeader()); 
            console.log('22222') 
          } 
          else{ 
            const header: Header[] = [{ headerKey: 'test', headerValue: '123456789' }]; 
            this.controller.loadUrl('https://www.huawei.com', header) 
          } 
          return null; 
        }) 
    } 
  } 
}
分享
微博
QQ
微信
回复
2024-09-05 18:05:51
相关问题
HamonyOS 设置webview请求header
560浏览 • 1回复 待解决
请问下鸿蒙webview如何设置请求
6774浏览 • 1回复 待解决
HarmonyOS Web组件如何附加请求header
74浏览 • 1回复 待解决
HarmonyOS RN项目下http请求header问题
23浏览 • 1回复 待解决
HarmonyOS 请求设置cookie
52浏览 • 1回复 待解决
web组件如何设置请求
393浏览 • 1回复 待解决
HarmonyOS webview怎么添加header
10浏览 • 1回复 待解决
HarmonyOS 请求信息修改
171浏览 • 1回复 待解决
HarmonyOS Http请求问题咨询
74浏览 • 1回复 待解决
harmonyOs 怎么统一配置主题?
9500浏览 • 1回复 待解决