我有一个网站,它将字符串化的 JavaScript 对象保存到 sessionStorage 中。它在桌面浏览器上运行良好 - 根据 MDN 上的描述,数据在页面重新加载后仍然存在。
在 Android 手机上,当用户从另一个选项卡切换回来或浏览器从后台返回到前台时,重新加载选项卡的情况并不罕见,我预计 sessionStorage 将持续存在。然而情况似乎并非如此。 sessionStorage 丢失了,就像创建了一个新 session 一样。
我想过使用 localStorage 来代替,即使 session 关闭它也不会过期。但它并没有真正解决我所有的问题 - 因为我希望用户可以在多个选项卡上多次打开它,并在每个选项卡上执行不同的操作。
所以我的问题是:
- 上面描述的 sessionStorage 行为是否符合预期?如果不是,我可以采取什么措施来纠正它?
- 如果行为符合预期,并且我必须依赖 localStorage,那么如何识别为每个单独选项卡存储的对象?
预先感谢您的帮助!
最佳答案
正如其他人评论的那样,SessionStorage 的设计是临时的。移动浏览器生命周期高度致力于减少资源使用,并且选项卡的拆卸更加积极。
要解决此问题,您可以将随机选项卡 ID 推送到 URL,然后为所有 LocalStorage 键添加此 ID 前缀。刷新选项卡时,您只需从 URL 读取选项卡 ID 并使用它来访问 LocalStorage 中的数据。
LocalStorage 有一个非常简单的 API,因此您可以编写一个包装器,将键前缀隐藏在其他代码之外。
关于javascript - Android 上的 sessionStorage 意外清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659605/