使用场景:
webViewA 与 webViewB 两个页面
1)webViewA 中有个标记flag = 10
2)从webViewA ->webViewB ,改变了标记flag = 15
3)返回webViewA 页面,刷新网页webView.reload()
刷新页面后, 发现对应的标记没有改变,据h5反馈是缓存的问题, 尝试了各种清空缓存方式, 然后设置重新加载不使用缓存, 然并卵...但风雨跟彩虹更配哦😯
解决方法:
//1. 创建单利WKProcessPool
class EKWWKProcessPool: WKProcessPool {
class var sharedProcessPool: EKWWKProcessPool {
struct Static {
static let instance: EKWWKProcessPool = EKWWKProcessPool()
}
return Static.instance
}
}
此处也可以直接使用下面的方式创建单利
static let instance = EKWWKProcessPool()
//2.使用创建的单例WKProcessPool
let configuration = WKWebViewConfiguration.init()
let userController = WKUserContentController.init()
configuration.userContentController = userController
//使用单例 解决locastorge 储存问题
configuration.processPool = EKWWKProcessPool.sharedProcessPool
let preferences = WKPreferences.init()
preferences.javaScriptCanOpenWindowsAutomatically = true
configuration.preferences = preferences
let webView = WKWebView.init(frame: CGRect.zero, configuration: configuration)
关键在于configuration.processPool = EKWWKProcessPool.sharedProcessPool
正如注释,使用单利解决了这个问题, 不同的webView使用同一个WKProcessPool共享Web Content processes
HTML5存储方式
HTML5在客户端存储数据的方式:cookie , localStorage, sessionStorage
cookie:只能存储少量的数据, 常用来存储账号密码等
localStorage : 没有时间限制的数据存储
sessionStorage : 针对一个 session 的数据存储, 当网页关闭时,数据也会被删除。
参考:
http://www.w3school.com.cn/html5/html_5_webstorage.asp
https://zhuanlan.zhihu.com/p/24990222
http://www.jianshu.com/p/8570221c608d
其他解决方案(未尝试):
https://segmentfault.com/q/1010000006785167?_ea=1142000
以上仅是个人使用总结,欢迎批评指正补充~~~~~~~