1

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

WebViews 使用共享的 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 同步。

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

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

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

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

我正在开发 iOS 9,因为这些是要求。

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

有人有一个可靠的解决方案吗?

4

1 回答 1

0

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

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

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

于 2018-11-10T04:47:39.520 回答