我有一个网站,它将字符串化的JavaScript对象保存到sessionStorage中。它适用于桌面浏览器 - 按照MDN上的描述,数据可以在页面重新加载时存活。
在Android手机上,当用户从另一个标签切换回来或当浏览器从后台返回到前台时,重新加载标签的情况并不少见,我希望sessionStorage会持续存在。然而,情况似乎并非如此。 sessionStorage不见了,就好像创建了一个新会话一样。
我想过使用localStorage,即使会话关闭也不会过期。它并没有真正解决我的所有问题 - 因为我希望用户可以在多个选项卡上多次打开它,并在每个选项卡上执行不同的操作。
所以我的问题是:
提前感谢您的帮助!
答案 0 :(得分:1)
正如其他人评论的那样,SessionStorage 是临时设计的。移动浏览器生命周期非常注重减少资源使用,并且更积极地拆除标签页。
要解决此问题,您可以将随机选项卡 ID 推送到 URL,然后使用此 ID 作为所有 LocalStorage 键的前缀。刷新选项卡时,您只需从 URL 读取选项卡 ID 并使用它来访问 LocalStorage 中的数据。
LocalStorage 有一个非常简单的 API,因此您可以编写一个包装器,将键前缀从其他代码中隐藏起来。
答案 1 :(得分:0)
是的,这就是sessionStorage的工作方式。行为是预期的。
sessionStorage每个标签都是唯一的。如果用户关闭选项卡,则会删除sessionStorage。也就是说,只要用户停留在选项卡上,就会保存会话存储。
您在localStorage中存储的内容会一直存在,直到明确删除为止。所做的更改将保存并可用于该网站的所有当前和未来访问。
所以,是的,最好使用localStorage并在会话结束时将其清除。