我需要在两个iOS 10和iOS 11的WKWebView中设置一个cookie。读取this之后,我使用iOS 10中的JavaScript脚本和iOS 11中的WKWebsiteDataStore为2个iOS版本编写了不同的代码。
在使用iOS 10时,我没有问题,但在iOS 11上,Web应用程序可以看到我在上一个会话中使用的cookie。我的意思是,如果我第一次启动该应用程序,则cookie值为“ A”,则网络应用程序看不到该cookie;如果我关闭该应用程序并使用cookie的新值“ B”重新启动,则Web应用程序现在会从cookie中读取“ A”。但是,通过Web检查器,我看到了cookie的正确值。
似乎使用WKWebsiteDataStore设置cookie太晚了;我该如何解决这个问题(即使在iOS 11中也不使用与iOS 10中使用的相同代码)?
我的代码是:
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let configuration = WKWebViewConfiguration()
let userContentController = WKUserContentController()
configuration.preferences = preferences
if #available(iOS 11, *) {
if let cookie = cookie {
let dataStore = WKWebsiteDataStore.default()
dataStore.httpCookieStore.setCookie(cookie) {
configuration.websiteDataStore = dataStore
configuration.userContentController = userContentController
self.createAndLoadWebView(with: configuration)
}
}
} else {
if let cookie = cookie {
let script = getJSCookiesString(for: [cookie])
let cookieScript = WKUserScript(source: script, injectionTime: .atDocumentStart, forMainFrameOnly: false)
userContentController.addUserScript(cookieScript)
configuration.userContentController = userContentController
createAndLoadWebView(with: configuration)
}
}
然后:
private func createAndLoadWebView(with configuration: WKWebViewConfiguration) {
webView = WKWebView(frame: self.containerView.frame, configuration: configuration)
self.containerView.addSubview(webView)
let req = URLRequest(url: pageUrl)
webView.load(req)
}
答案 0 :(得分:0)
在Request标头中添加相同的cookie,我遇到相同的问题,但是在标头请求页面中添加cookie后正常加载。