首页 文章

如何从swift4中的WKWebView获取cookie值?

提问于
浏览
0

我无法从这个网站获取cookie - “https://bødekontrol.dk”我正在使用xcode -9.4.1和iOS 11.我已经按照下面的代码,

import UIKit import WebKit类ViewController:UIViewController {var urlString =“https://bødekontrol.dk”var webView:WKWebView! fileprivate var webViewIsInited = false override func viewDidLoad(){super.viewDidLoad()

// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
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)
    }
}

}扩展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")

}

}

扩展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
}

}

扩展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

    实现此协议 WKHTTPCookieStoreObserver 并检查此协议的功能 .

    cookiesDidChange
    

相关问题