在 iOS 9 上的多个 WKWebViews 中同步 cookie

Posted

技术标签:

【中文标题】在 iOS 9 上的多个 WKWebViews 中同步 cookie【英文标题】:Sync cookies in multiple WKWebViews on iOS 9 【发布时间】:2018-11-09 12:49:02 【问题描述】:

我正在使用 2 个 ViewControllers 和 2 个 WKWebViews。

WebView 使用共享的 WKWebViewConfiguration。 扩展 WKWebViewConfiguration

static var Shared : WKWebViewConfiguration
    if sharedConfiguration == nil
        sharedConfiguration = WKWebViewConfiguration()
        sharedConfiguration.websiteDataStore = WKWebsiteDataStore.default()
        sharedConfiguration.processPool = WKProcessPool()
    
    return sharedConfiguration


private static var sharedConfiguration : WKWebViewConfiguration!

我在每个 webView 上传递这个,从我读到的应该是共享 Cookie 的解决方案。

但是因为我正在通过 webContent 进行登录,所以无论用户是否登录,我都希望拥有 webViews SYNCHED

问题发生在用户登录时。我遵循的步骤是:

1) 我已经确定了主机和路径,并检查了navigationAction.request.url.hostnavigationAction.request.url.path 当用户发出请求,并且请求发生如果凭据正确(所以我知道正确的主机和路径)我创建一个 bool var 指示用户已 登录

2) 在 WebView didFinish : FINISH 之后,我调用一个函数来重新加载必须 refreshed 的 webView,但 WebView 的行为不像它们有 cookie。

3) 几秒钟后(每次不同),在每个预览中添加手动代码 .reload() 网络视图,网络视图同步。

我正在使用 ios 9,因为这些是要求。

看起来cookie是异步的,据我了解,最终它们到达了共享的processPool或websiteDataStore。

谁有固体溶液?

【问题讨论】:

【参考方案1】:

您不需要共享相同的 web 配置,您只需要在创建每个 webview 配置后共享 processPoolKWebsiteDataStore.default()。要验证您可以从 Safari 开发者工具中检查 cookie。

正如@PS 提到的,没有任何解决方法可以让他同步 cookie。我也遇到同样的问题。但我尝试了一些意想不到的方法来解决这个问题,那就是 100% 的工作

Cookie 同步需要一些时间才能与 wkwebview 的 cookie 存储同步。所以我的修复只是做了一个虚拟的网络请求,它将在应用程序启动时同步 cookie,之后,无论你必须使用登录或注销调用,你都可以使用而无需进行任何进一步的修改。

【讨论】:

看起来cookies是共享的,但问题是如果我刷新一个WebView它有cookies,但需要几秒钟才能更新。你有没有遇到过类似的问题? 只有第一次安装应用程序时我才会遇到此类问题。 cookie 同步需要一些时间。但在那之后,应该没有问题 因为我正在处理 WebContext 上的登录/注销集成按钮,所以我有 5-10 秒的延迟来同步 Cookie(如果这是问题)并显示登录的正确状态/登出 。知道为什么会这样吗? 一件事你一直面临着时间延迟?如果是,那么它的差异问题。如果只有一次就可以修复 不,我一直面临着延迟。有什么建议吗?

以上是关于在 iOS 9 上的多个 WKWebViews 中同步 cookie的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14 上的 WKWebView 仅在显着延迟后加载内容

将具有多个子视图的视图截图为 wkwebview

为啥我的 WKWebviews 在模拟器上工作,但无法在 iPad 上提取文件?

swift WKWebViews + keyboardRequiresUserInteraction.swift

java.io.IOException:流已重置:多个设备上的 REFUSED_STREAM

UITableViewCell 里面有一个 StackView,里面有动态添加的 WKWebViews 和 UIImageViews