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
351浏览 • 1回复 待解决
请问下鸿蒙webview如何设置请求
6521浏览 • 1回复 待解决
web组件如何设置请求
225浏览 • 1回复 待解决
HarmonyOS WebView拦截网络请求
231浏览 • 1回复 待解决
harmonyOs 怎么统一配置主题?
9321浏览 • 1回复 待解决
如何给页面URL附加HTTP请求
2468浏览 • 1回复 待解决
HarmonyOS Video组件能否设置自定义header
196浏览 • 1回复 待解决
HarmonyOS 模块版本号怎么统一配置
386浏览 • 1回复 待解决
鸿蒙webview调用摄像和麦克风
2077浏览 • 0回复 待解决
HarmonyOS 升级之后统一认证交互问题
252浏览 • 0回复 待解决
HarmonyOS webview如何设置自适应
453浏览 • 1回复 待解决
WebView支持设置WebView圆角吗?
813浏览 • 1回复 待解决
是否支持统一styles样式封装?
132浏览 • 1回复 待解决
webview中如何拦截网络请求
447浏览 • 1回复 待解决
webview如何实现网络请求拦截功能
2040浏览 • 1回复 待解决