在iOS 9的多个WKWebViews中同步Cookie

时间:2018-11-09 12:49:03

标签: ios swift cookies wkwebview

我正在将2个ViewController与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 已同步

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

1)我已经确定了主机和路径,并检查了navigationAction.request.url.hostnavigationAction.request.url.path 当用户提出请求时,如果凭证正确(因此我知道正确的主机和路径),则请求仅发生 (我知道正确的主机和路径),我创建了一个布尔变量,指示用户已登录

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

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

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

从我的理解来看,cookie似乎是异步的,最终它们到达了共享的processPool或websiteDataStore。

有人解决吗?

1 个答案:

答案 0 :(得分:0)

您无需共享相同的Web配置,只需在创建每个Webview配置后共享processPoolKWebsiteDataStore.default()。要进行验证,您可以从Safari开发人员工具中检查Cookie。

如@PS所述,他无法同步Cookie。我也遇到同样的问题。但是我尝试了一些意外的操作来解决此问题,并且可以100%

Cookie同步需要一些时间与wkwebview的Cookie存储进行同步。因此,我的解决方法只是提出虚拟网络请求,该请求会在应用启动时同步Cookie,之后,无论您在哪里使用登录或注销呼叫,都可以在不进行任何进一步修改的情况下使用它。