【发布时间】:2018-06-22 15:05:06
【问题描述】:
我需要在 iOS 10 和 iOS 11 上的 WKWebView 中设置一个 cookie。阅读 this 后,我使用 iOS 10 中的 JavaScript 脚本和 iOS 11 中的 WKWebsiteDataStore 为 2 个 iOS 版本编写了不同的代码。
使用 iOS 10 时我没有任何问题,但使用 iOS 11 时,Web 应用程序会看到我在上一个会话中使用的 cookie。我的意思是,如果我第一次启动应用程序时 cookie 的值为“A”,则网络应用程序看不到 cookie;如果我关闭应用程序并使用“B”作为 cookie 的新值重新启动它,网络应用程序现在会从 cookie 中读取“A”。但是,通过 Web Inspector,我看到了 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)
}
【问题讨论】:
标签: cookies ios10 ios11 wkwebview