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 回复
- 通过拦截主资源的方式解决 主资源请求改为http请求,拦截主资源,读取本地的文件返回给内核
- 设置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。


