我正在将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.host
和navigationAction.request.url.path
当用户提出请求时,如果凭证正确(因此我知道正确的主机和路径),则请求仅发生 (我知道正确的主机和路径),我创建了一个布尔变量,指示用户已登录
2)在WebView didFinish:FINISH之后,我调用了一个函数,该函数重新加载必须得到刷新的webView,但是WebView的行为并不像它们具有cookie。
3)几秒钟后(每次不同),在每次预览中手动添加代码.reload()Web视图,然后同步WebView。
我正在使用iOS 9,因为这些是要求。
从我的理解来看,cookie似乎是异步的,最终它们到达了共享的processPool或websiteDataStore。
有人解决吗?
答案 0 :(得分:0)
您无需共享相同的Web配置,只需在创建每个Webview配置后共享processPool
和KWebsiteDataStore.default()
。要进行验证,您可以从Safari开发人员工具中检查Cookie。
如@PS所述,他无法同步Cookie。我也遇到同样的问题。但是我尝试了一些意外的操作来解决此问题,并且可以100%
Cookie同步需要一些时间与wkwebview的Cookie存储进行同步。因此,我的解决方法只是提出虚拟网络请求,该请求会在应用启动时同步Cookie,之后,无论您在哪里使用登录或注销呼叫,都可以在不进行任何进一步修改的情况下使用它。