1. ホーム
  2. ios

WKWebViewからすべてのクッキーを取得する

2023-08-29 09:41:26

質問

からクッキーを取得する際に UIWebView を使うのは簡単なようです。 NSHTTPCookieStorage.sharedHTTPCookieStorage() を使えば、どうやら WKWebView はクッキーを別の場所に保存しているようです。

少し調べてみたところ、クッキーを掴んでいるのは NSHTTPURLResponse オブジェクトから取得することができました。しかし、これには 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 でクッキーを管理するクラスがあります。 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??
    }
  }
})

クッキーのデータを取得するための回避策はありますか?

どのように解決するのですか?

最後に httpCookieStore に対して WKWebsiteDataStore は iOS 11 で上陸しました。

https://developer.apple.com/documentation/webkit/wkwebsitedatastore?changes=latest_minor