iOS11 WKWebview cookie 自动管理

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请求共享。

你可能感兴趣的:(iOS11 WKWebview cookie 自动管理)