ios - 未调用 WKHTTPCookieStore.setCookie 完成处理程序

标签 ios swift cookies webkit wkwebview

我需要在 WKWebView 实例之间共享 cookie - 为此,我使用单个 WKWebViewConfiguration 实例,然后用于初始化每个 WKWebView。

为了做到这一点,我假设我必须使用共享的 WKProcessPool,例如:

let websiteDataStore = WKWebsiteDataStore.default()
websiteDataStore.httpCookieStore.add(self)

let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = websiteDataStore
configuration.processPool = WKProcessPool()   /* !!! */

但是这样做会导致 setCookie 完成处理程序不会触发。

let cookieStore = self.webConfiguration.websiteDataStore.httpCookieStore
     cookieStore.setCookie(cookie, completionHandler: {
})

如果我不设置 WKProcessPool (*) 实例 - 那么完成 block 会正常触发,但显然 WebViews 看不到 cookie;/有人遇到过这个吗?关于如何共享 cookie 的想法?

iOS: 11.2.6

最佳答案

经过进一步测试后,我设法找到了解决方案 - 尽管我不确定发生了什么。简而言之 - 在 WKWebView 实例化后,上面的 完成处理程序会触发 OK。

在我的例子中,我需要在登录后设置一些 cookie(因此不会显示 ATM 的网页 View )。所以调用 setCookie 只会在某处排队这些操作——当 Web 客户端被触发时它们会被刷新。如果有人可以链接文档 - 那太好了!


更新

由于这个问题仍然存在 - 我终于回到了这个问题上。我现在的解决方案是:

  1. 在钥匙串(keychain)中缓存 cookie 值(每次应用程序调用 HTTPCookieStore.setCookie - 这可能完成或不完成(这是问题所在)

  2. 当 HTTPCookieStore.setCookie{ } 完成 block 触发时(确认 cookie 确实已设置)我然后从钥匙串(keychain)中删除值,webview 现在负责 cookie 值的生命周期)

  3. 每次启动应用程序时,我都会检查 cookie 值是否缓存在钥匙串(keychain)中 -> 如果是,则 HTTPCookieStore.setCookie()

上面可以无限​​循环,直到实际打开 webview。

关于ios - 未调用 WKHTTPCookieStore.setCookie 完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452968/

相关文章:

ios - 从 iOS 中的 Web 服务获取故障代码

ios - 如何检测UITapGestureRecognizer的单击 View ?

javascript - session 如何在 Express.js 和 Node.js 中工作?

javascript - CORS 请求后,AJAX 无法在浏览器上设置 Cookie。 Set-Cookie header 仅存在于 FireFox 中,而不存在于 Chrome 中

ios - 第二次加载 UIView 后 NSConstraints 使应用程序崩溃

iphone - 为什么我的 cocos2d box2d 项目中的第二个球没有弹跳?

swift - 从 Swift 开源版本访问 vscanf 等

ios - 如何同步背景音乐和按钮?

ios - 以编程方式切换 View Controller 以在选项卡栏 Controller 中显示 View

javascript - 在 Chrome 扩展中,你能强制在一切之前注入(inject)一些 javascript 吗?