HarmonyOS WebView加载本地html文件的时候如何设置Cookie?

根据文档,WebView加载网络链接的时候 可以设置Cookie,代码如下:

Web({ src: "https://www.huawei.com", controller: this.webController })
  .onPageEnd(() => {
    try {
      web_webview.WebCookieManager.configCookieSync("https://www.huawei.com", 'test=1');
    } catch (error) {
      let e: business_error.BusinessError = error as business_error.BusinessError;
      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
    }
  })
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

但是如果加载本地文件:

Web({ src: $rawfile("index.html"), controller: this.webController })
  .onPageEnd(() => {
    try {
      web_webview.WebCookieManager.configCookieSync("index.html", 'test=1');
    } catch (error) {
      let e: business_error.BusinessError = error as business_error.BusinessError;
      console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
    }
  })
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

这样写不起作用,请问应该如何写?

HarmonyOS
2025-01-09 16:44:15
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
aquaa
  1. 通过拦截主资源的方式解决 主资源请求改为http请求,拦截主资源,读取本地的文件返回给内核
  2. 设置cookie的时候指定 samesite=none;secure 但是这种需要把file协议里发起的http请求改为https,需要服务器支持。示例代码如下:
import webview from '@ohos.web.webview';

@Entry
@Component
struct MainPage {
  @State isLoading: boolean = true
  @State msg: string = ""
  controller: webview.WebviewController = new webview.WebviewController();

  aboutToAppear() {
    webview.WebviewController.setWebDebuggingAccess(true);
    webview.WebCookieManager.configCookieSync('https://xxx/index.html',' samesite=non;')
  }

  build() {
    Row() {
      Column() {
        Button().onClick(()=>{
          console.log('cookie为:'+webview.WebCookieManager.fetchCookieSync('https://xxx/index.html'))
        })
        Web({ src: "https://xxx/index.html", controller:this.controller })
          .javaScriptAccess(true)
          .domStorageAccess(true)
          .fileAccess(true)
          .onInterceptRequest((event) => {
            if (!event) {
              return;
            }
            let requestUrl:string = event.request.getRequestUrl();
            console.log('请求为:'+event.request.getRequestUrl())
            interface HtmlMimeType{
              type:string,
              mime:string
            }
            let typeArr :Array<HtmlMimeType> = [{
              type:".html",
              mime:"text/html"
            },{
              type:".js",
              mime:"text/javascript"
            },{
              type:".css",
              mime:"text/css"
            },{
              type:".wasm",
              mime:"application/wasm"
            }];
            let isSearch:boolean = false;
            let searchTypeObj : HtmlMimeType;
            for (const typeObj of typeArr) {
              let index:number = requestUrl.lastIndexOf(typeObj.type);
              if (index > 0) {
                isSearch = true;
                searchTypeObj = typeObj;
                break;
              }
            }
            if (isSearch) {
              let rawfileName :string = requestUrl.replace("https://xxx/","");
              let endIndex = rawfileName.indexOf("?");
              if (endIndex > - 1) {//如果没去除,文件名会导致错误
                rawfileName = rawfileName.substring(0,endIndex);
              }
              let response = new WebResourceResponse();
              response.setResponseData($rawfile(rawfileName));
              response.setResponseEncoding('utf-8');
              response.setResponseMimeType(searchTypeObj!.mime);
              response.setResponseCode(200);
              response.setReasonMessage('OK');
              response.setResponseIsReady(true);
              return response;
            }
            return null;
          })
          .width('100%')
          .height('100%')
      }
    }
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
分享
微博
QQ
微信
回复
2025-01-09 20:13:53


相关问题
HarmonyOS webview加载本地html问题
1661浏览 • 1回复 待解决
如何使用Web组件加载本地html文件
1630浏览 • 1回复 待解决
HarmonyOS webview如何加载沙箱html
1182浏览 • 1回复 待解决
HarmonyOS 如何加载本地沙盒中html
972浏览 • 1回复 待解决
HarmonyOS webview组件如何加载html代码?
1075浏览 • 1回复 待解决
HarmonyOS 集群环境设置webviewcookie
863浏览 • 1回复 待解决
web组件对html文件加载
1473浏览 • 1回复 待解决
HarmonyOS Web组件加载html文件异常
1326浏览 • 1回复 待解决