美文网首页Web前端之路iOS技术资料ios实用开发技巧
WKWebView localStorage 页面刷新 填坑记

WKWebView localStorage 页面刷新 填坑记

作者: _skye | 来源:发表于2017-08-23 14:59 被阅读1234次
使用场景:

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


以上仅是个人使用总结,欢迎批评指正补充~~~~~~~

相关文章

网友评论

    本文标题:WKWebView localStorage 页面刷新 填坑记

    本文链接:https://www.haomeiwen.com/subject/fxbddxtx.html