在WKHTTPCookieStorage iOS11中设置cookie

时间:2018-02-16 15:05:43

标签: ios cookies ios11 wkwebview

我创建了一个方法来将HTTPCookieStorage中的cookie设置为WKHTTPCookieStorage,因为看起来这个api是完全异步的所以我创建了一个异步方法来设置wkHTTPCookieStorage中的cookie。

    func copyCookiesToWKStore(completion: @escaping () -> Void) {
    if let httpCookies: [HTTPCookie] = self.httpCookieStorage.cookies {
        print("updating wkCookies with httpCookies: \(httpCookies)")
        func copyCookiesAsync(index: Int, cookieHandler: SDCookiesHandler?) {
            if let cookieHandler = cookieHandler, index < httpCookies.count {
                let cookie = httpCookies[index]
                cookieHandler.wkCookieStore.setCookie(cookie, completionHandler: {
                    print("set cookie in Cookie Storage: \(cookie)")
                    DispatchQueue.main.async {
                        copyCookiesAsync(index: index + 1, cookieHandler: cookieHandler)
                    }
                })
            }
            else {
                completion()
            }
        }
        weak var cookieHandler = self
        copyCookiesAsync(index: 0, cookieHandler: cookieHandler)
    } else {
        completion()
    }
}

然后在我们要加载webview.load

时同步并插入
wkCookiesHandler.copyCookiesToWKStore { [weak self] in
            if let weakSelf = self {
                DispatchQueue.main.async {
                    weakSelf.webView.load(cookiesRequest)
                }

            } else {
                print("self is null")
            }
        }

但是当webview调用decisionPolicyFor navigationAction方法时,此时WKCookieStorage中的cookie未完全同步。

我在一些帖子中读到WKProcessPool有自己的循环来同步cookie,并且重置它,导致cookie与wkwebview同步,但我发现我在现有的webview流程中,它会导致webview出现奇怪的文物。

有没有人开始使用WKCookieStorage api,如何在这个api中插入cookie,WKWebview可以看到。

0 个答案:

没有答案