Как получить значения файлов cookie из WKWebView в Swift 4? - PullRequest
0 голосов
/ 16 сентября 2018

Я не могу получить куки с этого сайта - "https://bødekontrol.dk" Я использую Xcode 9.4.1 и iOS 11. Я следовал приведенному ниже коду,

import UIKit
import WebKit
class ViewController: UIViewController {
    var urlString = "https://bødekontrol.dk"
    var webView: WKWebView!
    fileprivate var webViewIsInited = false

    override func viewWillLayoutSubviews() {
        if !webViewIsInited {
            webViewIsInited = true
            if webView == nil {
                webView = WKWebView(frame: UIScreen.main.bounds, configuration: WKWebViewConfiguration())
            }

            view.addSubview(webView)
            webView.navigationDelegate = self
            webView.uiDelegate = self
            webView.loadUrl(string: urlString)
        }
    }
}
extension ViewController: WKNavigationDelegate {

    func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        decisionHandler(.allow)
        if let httpResponse = navigationResponse.response as? HTTPURLResponse {
            if let headers = httpResponse.allHeaderFields as? [String: String], let url = httpResponse.url {
                let cookies = HTTPCookie.cookies(withResponseHeaderFields: headers, for: url)

                for cookie in cookies {
                    print(cookie.description)

                    print("found cookie " + cookie.name + " " + cookie.value)
                }
            }
        }
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("didFinish navigation")

    }
}

extension ViewController: WKUIDelegate {

    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        if navigationAction.targetFrame == nil {
            let vc = ViewController()
            vc.urlString = navigationAction.request.url?.absoluteString ?? "http://google.com"
            vc.view.frame = UIScreen.main.bounds
            vc.webView = WKWebView(frame: UIScreen.main.bounds, configuration: configuration)
            navigationController?.pushViewController(vc, animated: false)
            return vc.webView
        }
        return nil
    }
}

extension WKWebView {

    func loadUrl(string: String) {
        if let encoded = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
            let url = URL(string: encoded)
        {
            if self.url?.host == url.host {
                self.reload()
            } else {
                load(URLRequest(url: url))
            }
        }
    }
}

1 Ответ

0 голосов
/ 17 сентября 2018

Реализовать этот протокол WKHTTPCookieStoreObserver и проверить работу этого протокола.

cookiesDidChange
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...