簡體   English   中英

如何從 Swift 4 中的 WKWebView 獲取 cookie 值?

[英]How to fetch cookies values from WKWebView in Swift 4?

我無法從該網站獲取 cookie - “ 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))
            }
        }
    }
}

實現該協議WKHTTPCookieStoreObserver並檢查該協議的功能。

cookiesDidChange

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM