最近和H5做交互,涉及到传参,H5写好的从LocalStorage取数据,让我直接存到LocalStorage里他取,以前从没这么干过,觉得貌似可行,所以试一试
- 第一步,先找到缓存 做个webview,打开百度(https//:www.baidu.com),在模拟器缓存里找到文件路径 /Users/liuchaoqun/Library/Developer/CoreSimulator/Devices/7BC59479-6683-4307-9845-145CB895EA84/data/Containers/Data/Application/5BA0953B-EABE-4D1E-90DA-36DC402AEE87/Library/WebKit/com.cq.WKWebViewLocalStorageTool/WebsiteData/LocalStorage/https_www.baidu.com_0.localstorage
然后我们做如下封装,方便取地址,
static func localStorage(withUrl url: String) -> String {
let bundleId = Bundle.main.infoDictionary!["CFBundleIdentifier"]
return "\(NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true).last!)/WebKit/\(bundleId!)/WebsiteData/LocalStorage/\(url).localstorage"
}
那么问题来了,https_www.baidu.com_0后面拼的0如何确定?目前无法确定拼接0的逻辑
-
既然找到缓存,就继续看,https_www.baidu.com_0.localstorage是一个sqlite, 使用Navicat Premium建立链接,里面一个ItemTable的表,用key value 存着一堆BLOB类型的数据,试着取出,可以取,但很麻烦,具体参考 github.com/Azure/azure… 【链接】如何通过iOS使用对象(Blob)存储-Azure docs.microsoft.com/zh-cn/azure…
-
重新新建一个项目,打开模拟器,发现并没有缓存,也就是说在用户打开之前必须后台走一遍才能有缓存,浪费性能
-
其次,这个东西还存在很多缺陷,具体参考 thinkmind.org/download.ph…
-
可能会在内存紧张的时候被系统清掉,也有可能被自己的清除缓存功能清掉,那么每次在存参数之前,就必须后台走一遍地址,对性能很不好
-
读写效率极其低下,每次都要序列化反序列化
-
对文件大小有限制,不能超过5M,虽然这条用的不多
综上所述,LocalStorage是不能用来和H5交互传参的,还是让H5写函数我们调用,或者拼接地址