我使用的是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上,从我所读到的来看,这应该是共享Cookies的解决方案。
但是,由于我正在通过webContent进行登录,所以如果用户登录与否,我想让webViews 同步。
当用户登录到中时,问题就会发生。我所遵循的步骤是:
1)我必须标识主机和路径,并在用户发出请求时检查navigationAction.request.url.host和navigationAction.request.url.path,如果凭据正确(因此我知道正确的主机和路径),请求只发生,则创建一个bool,指示用户已登录。
2)在WebView didFinish : FINISH之后,我调用一个func,它重新加载必须刷新的webViews,但是WebViews的行为并不像它们有cookie。
3)经过几秒钟(每次不同的时间),在每次预览中添加.reload()代码webViews (),实现webViews的同步。
我正在研究iOS 9,因为这些都是需求。
根据我的理解,cookie看起来是异步的,最终到达共享的processPool或websiteDataStore。
有人有固溶体吗?
发布于 2018-11-10 04:47:39
您不需要共享相同的web配置,您只需要在创建每个web视图配置之后共享processPool和KWebsiteDataStore.default()。要验证,您可以从Safari developer工具中检查cookie。
正如@PS所提到的,没有解决办法可以让他同步cookies。我也遇到了同样的问题。但是我尝试了一些意想不到的方法来解决这个问题,那就是100%的工作。
Cookie同步需要一些时间与用于wkwebview的cookie存储同步。因此,我的修复只是做了虚拟的网络请求,将同步cookie在应用程序开始和之后,无论您必须使用您的登录或注销呼叫,您可以使用,而无需任何进一步的修改。
https://stackoverflow.com/questions/53226012
复制相似问题