微信公众号通过会话框进入页面获取localStorage为空的bug
发表时间:2020-9-24
发布人:葵宇科技
浏览次数:154
问题:
如果点击公众号的菜单进入详情是能获取到 localStorage的,但是通过公众号返回的链接进入详情,拿到的localStorage为{}
分析:
【可能原因1】-存储时间短:看网上有说,localStorage在微信上存储时间只有6 7分钟,但是我第一次点击进去,存储了本地数据后,马上重新进去,还是获取为空。
【可能原因2】-取出的是json格式,不是对象:如果你是用对象格式存进本地数据的,那么取出来的确实是json字符串,需要用JSON.parse(localStorage.getItem('user')).userId 这样转换一下。这里我转换了,拿到的依然是空。
【可能原因3】-会话框跟H5不共用:虽然我两次从公众号会话框进入详情没有获取到localStorage,但是我两次通过菜单进入能正常获取到localStorage。
但其实有个诡异的情况,不管通过哪种方式进入,控制台查看的本地存储都是有数据,且数据正常。
那么问题就来了,会话框到底是什么机制,为什么从它返回的链接进入就获取不到本地存储数据呢?
原因大概是:每次从对话框进入页面都会打开一个新的webView容器,而这个容器和点击菜单进入的容器不是同一个,所以它获取不了原来存储的本地数据。并且,由于它每次打开一个新的容器,即时你打开存储了数据后,关闭后重新打开,在新的容器上也拿不到上个容器的数据,所以localStorage还是空的。
解决:
使用cookie存储和读取相应的数据