wkwebview 在h5页面展示性能上有很大的提升,但是很多时候,大家在wkwebview的cookie管理上要做很多的努力,还无法达到曾今在UIWebview 上cookieStorage的自动管理cookie的效果,所以WKWebview 使用过程中在cookie管理上也算是一大痛点,但在iOS11 的API更新后,可以达到和UIWebview 相同的cookie管理方式,可以各个webview之间共享一套cookie缓存
WKWebview 在初始化时,可以传入WKWebViewConfiguration 对象,用于配置当前WKwebview 的各项 功能配置,用户偏好设置(WKPreferences),JSHandler(WKUserContentController)等,从WKWebViewConfiguration的api中可以查看相关详细。
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
self.webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
[self.view addSubview:self.webview];
self.config = config;
从 WKWebViewConfiguration 对象中可以互获取 websiteDataStore对象,默认获取的是持久化 dataSource。通过websiteDataStore,可以获取到 WKHTTPCookieStore 的对象,此对象就是WKWebview用来自动管理cookie的,使用方式和特点基本和HTTPCookieStorage一致。
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{
NSHTTPCookieName : @"huyanling",
NSHTTPCookieValue : @"hahahha",
NSHTTPCookieDomain : @".baidu.com",
NSHTTPCookiePath : @"/",
NSHTTPCookieExpires : [NSDate dateWithTimeIntervalSinceNow:60*60*24]
}];
[self.config.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:^{
[self fetchWKWebviewCookie];
}];
上面例子是往WKHTTPCookieStore 中添加新的cookie,经测试,在WKWebview小惠后,创建新的WKWebview后,仍可访问,并且可以与JS请求共享。
网友评论