有两个view,它们里面都有一个wkwebview,对应两个页面a.html和b.html,a能打开b,b能退回到a;首先打开a,a里面有一个按钮,点击按钮的时候往localstorage里面set数据(new Date().getTime()),然后JS调用原生IOS代码打开b页面,b页面加载好后再从localstorage里面取a页面set的数据,发现取到的数据是旧的,是上一次a页面set进去的数据,而且奇怪的是如果a页面往localstorage set完数据后延迟2秒再打开b页面,取到的数据是则刚刚set进去的,没有这个问题。求解决。
WKWebView
的 bug 很多。你这个情况是因为 I/O 操作不是及时的,set
只是写在内存缓存里,系统在合适的时机才写磁盘。你可以设置定时器检查是否写成功。另外,使用 localStorage 不是很可靠,既然你能通过 JS 让 iOS 打开页面,为什么不写个 iOS 方法让 JS 存取本地缓存呢,可以使用
NSUserDefaults
、序列化本地文件、数据库等,更灵活,完全掌控。