用WKWebsiteDataStore设置cookie是否为时已晚?

时间:2018-06-22 15:05:07

标签: cookies ios10 ios11 wkwebview

我需要在两个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)
}

1 个答案:

答案 0 :(得分:0)

在Request标头中添加相同的cookie,我遇到相同的问题,但是在标头请求页面中添加cookie后正常加载。