我正在拼命地尝试将自定义 cookie 添加到WKWebView
实例中(不使用 Javascript 或类似的解决方法)。
从 iOS 11 及更高版本开始,Apple 提供了一个 API 来执行此操作:WKWebView
sWKWebsiteDataStore
有一个 property httpCookieStore
。
这是我的(示例)代码:
import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView!
override func viewDidLoad() {
webView = WKWebView()
view.addSubview(webView)
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let cookie = HTTPCookie(properties: [
HTTPCookiePropertyKey.domain : "google.com",
HTTPCookiePropertyKey.path : "/",
HTTPCookiePropertyKey.secure : true,
HTTPCookiePropertyKey.name : "someCookieKey",
HTTPCookiePropertyKey.value : "someCookieValue"])!
let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
cookieStore.setCookie(cookie) {
DispatchQueue.main.async {
self.webView.load(URLRequest(url: URL(string: "https://google.com")!))
}
}
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
webView.frame = view.bounds
}
}
在此之后,如果我使用webView.configuration.websiteDataStore.httpCookieStore.getAllCookies(completionHandler:)
我会看到我的 cookie 在 cookie 列表中。
但是,当使用 Safari 的开发工具(当然是使用 iOS 模拟器)检查 webview 时,cookie 不会显示。
我还尝试使用 HTTP 代理(在我的例子中为 Charles)检查流量,以查看我的 HTTP 请求中是否包含 cookie。它不是。
我在这里做错了什么?如何将 cookie 添加到WKWebView
(在 iOS 11 及更高版本上)?