在 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.host
和navigationAction.request.url.path
当用户发出请求,并且请求发生仅如果凭据正确(所以我知道正确的主机和路径)我创建一个 bool var 指示用户已 登录
2) 在 WebView didFinish : FINISH 之后,我调用一个函数来重新加载必须 refreshed 的 webView,但 WebView 的行为不像它们有 cookie。
3) 几秒钟后(每次不同),在每个预览中添加手动代码 .reload() 网络视图,网络视图同步。
我正在使用 ios 9,因为这些是要求。
看起来cookie是异步的,据我了解,最终它们到达了共享的processPool或websiteDataStore。
谁有固体溶液?
【问题讨论】:
【参考方案1】:您不需要共享相同的 web 配置,您只需要在创建每个 webview 配置后共享 processPool
和 KWebsiteDataStore.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 仅在显着延迟后加载内容
为啥我的 WKWebviews 在模拟器上工作,但无法在 iPad 上提取文件?
swift WKWebViews + keyboardRequiresUserInteraction.swift
java.io.IOException:流已重置:多个设备上的 REFUSED_STREAM
UITableViewCell 里面有一个 StackView,里面有动态添加的 WKWebViews 和 UIImageViews