【发布时间】:2021-02-23 04:08:15
【问题描述】:
在 decidePolicyFor navigationAction 中的自定义 cookie 过期或丢失后,我无法重置或更新自定义 cookie。我尝试在decidePolicyFor navigationAction函数中重置cookie,似乎没有更新或无法设置cookie。
这是我的一些代码,
@IBOutlet weak var customWebView: UIView!
var webView : WKWebView!
var liveURL = "myLiveUrl"
let cookie = HTTPCookie(properties: [
.domain: "myLiveDomain",
.path: "/",
.name: "some name",
.value: "some value",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 10)
])
var isCookieReset : Bool = true
var urlrequestCurrent: URLRequest?
override func viewDidLoad() {
super.viewDidLoad()
self.addWebView()
}
private func addWebView(){
webView = WKWebView(frame: customWebView.bounds)
webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie!)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
webView.translatesAutoresizingMaskIntoConstraints = false
webView.uiDelegate = self
webView.navigationDelegate = self
customWebView.addSubview(webView)
DispatchQueue.main.async {
self.webView.load(URLRequest.init(url: URL.init(string: self.liveURL)!))
}
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
webView.configuration.websiteDataStore.httpCookieStore.getAllCookies { cookies in
self.isCookieReset = true
for cookie in cookies {
if cookie.name.contains("some name") {
self.isCookieReset = false
}
}
if(self.isCookieReset == true) {
if let currentrequest = self.urlrequestCurrent {
if currentrequest == navigationAction.request {
self.urlrequestCurrent = nil
decisionHandler(.allow)
return
}
}
decisionHandler(.cancel)
var customRequest = navigationAction.request
webView.configuration.websiteDataStore.httpCookieStore.setCookie(self.cookie!)
self.urlrequestCurrent = customRequest
self.webView.load(customRequest)
return
} else {
decisionHandler(.allow)
}
}
}
【问题讨论】: