в то время как получение файлов cookie из UIWebView
кажется простым, используя NSHTTPCookieStorage.sharedHTTPCookieStorage()
, кажется, что WKWebView
хранит файлы cookie в другом месте.
Я провел некоторое исследование, и я смог получить некоторые файлы cookie из захвата его из объекта NSHTTPURLResponse
. это, однако, не содержит всех файлов cookie, используемых WKWebView
:
func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {
if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url)
for cookie in cookies {
logDebug(cookie.description)
logDebug("found cookie " + cookie.name + " " + cookie.value)
}
}
}
}
Как ни странно, существует также класс WKWebsiteDataStore
в ios 9, который отвечает за управление куки в WKWebView
, однако класс не содержит общедоступный метод для извлечения данных cookie:
let storage = WKWebsiteDataStore.defaultDataStore()
storage.fetchDataRecordsOfTypes([WKWebsiteDataTypeCookies], completionHandler: { (records) -> Void in
for record in records {
logDebug("cookie record is " + record.debugDescription)
for dataType in record.dataTypes {
logDebug("data type is " + dataType.debugDescription)
// get cookie data??
}
}
})
Есть ли способ обхода файлов cookie?