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

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

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

Web({ src: "https://www.baidu.com", controller: this.webController })
  .onPageEnd(() => {
    try {
      web_webview.WebCookieManager.configCookieSync("https://www.baidu.com", 'test=1');
    } catch (error) {
      let e: business_error.BusinessError = error as business_error.BusinessError;
      console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
    }
  })

但是如果加载本地文件:
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}`);
    }
  })

这样写不起作用,请问应该如何写? 非常感谢


更多关于HarmonyOS鸿蒙Next中WebView加载本地html文件的时候如何设置Cookie?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
  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://www.ahahahah/index.html', ' samesite=non;');
  }

  build() {
    Row() {
      Column() {
        Button().onClick(() => {
          console.log('cookie为:' + webview.WebCookieManager.fetchCookieSync('https://www.ahahahah/index.html'))
        })
        Web({ src: "https://www.ahahahah/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://www.ahahahah/", "");
              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%')
      }
    }
  }
}

更多关于HarmonyOS鸿蒙Next中WebView加载本地html文件的时候如何设置Cookie?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,WebView加载本地HTML文件时设置Cookie可以通过setCookie方法实现。首先,创建WebView实例,然后使用getCookieManager获取CookieManager对象。接着,调用setCookie方法,传入目标URL和需要设置的Cookie字符串。例如:

let webView = new WebView();
let cookieManager = webView.getCookieManager();
cookieManager.setCookie("file:///your_local_file_path", "your_cookie_string");

确保在加载HTML文件之前设置Cookie。

在HarmonyOS鸿蒙Next中,使用WebView加载本地HTML文件时,可以通过CookieManager设置Cookie。首先,获取CookieManager实例,然后调用setCookie方法设置Cookie。示例代码如下:

CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie("file:///android_asset/local.html", "key=value");
cookieManager.flush();

确保在加载HTML文件之前设置好Cookie,以便WebView在请求时携带这些Cookie。

回到顶部