HTML5本地存储不持久化

12

本网站在使用Gingerbread操作系统的三星Galaxy Tab上。目前已经使用了原生浏览器和Dolphin HD浏览器。当用户进出网络覆盖范围时,本地存储中的项目似乎会随机消失。此外,存储似乎不能完全在浏览器崩溃或设备重启后恢复。奇怪的是,存储通常不会完全清除,只会丢失大量项目。是否有其他人遇到这个问题或有任何建议?

编辑:我指的是本地存储:

localStorage["Key"] = value;

使用以下方式获取:

localStorage.getItem("Key");

每次将数据添加到本地存储后,该网站都能检索并使用数据。然而,通常在漫游或浏览器/平板电脑崩溃之后的某个时候,数据就不再存在。我找到的所有信息都说本地存储应该是持久的,所以我真的不知道该怎么做。


2
建议:展示一些相关的代码,这样其他人可以验证它。 - Rob W
1
只是一个普遍的问题。 localStorage["Key"] =值添加的项在使用网站期间始终存在,但是在随机时间内突然消失。通常是在漫游或浏览器崩溃后。我只能复制一次,但每天有几个用户遇到它,发生时会造成相当大的问题。只是想知道这是否是已知的问题,如果其他HTML 5离线存储方法更可靠? - jmease
代码会非常有帮助。问题的例子可能是,如果网站在使用事务进行批量插入并且它们没有被提交,那么这就可以解释为什么大量数据突然消失了。 - Geekswordsman
1
我建议您使用WebSQL,尽管W3C已决定使用Index DB来替代WebSQL,但Index DB在Android和iOS上都不可用,而WebSQL仍然可用,并被许多公司用作离线存储。 - Yu Jianrong
1
WebSQL比LocalStorage的一个重要优势是:当LocalStorage为该站点存储满时,您在存储上的新设置将在iOS上失败,并且没有扩大存储的方法。 但是,如果您在iOS上使用WebSQL,则会提示用户扩大离线数据库,当您创建大于5M、10M、25M和50M的数据库时。 - Yu Jianrong
显示剩余6条评论
1个回答

3

需要进一步调试吗?也许你的代码在某种情况下覆盖了它? 我正在PhoneGap中使用localStorage/sessionStorage,从未出现过它们消失的情况...

添加以下事件处理程序:

window.addEventListener("storage", function(e) {
   console.debug(e);
}, false);

每当存储被访问时,它将触发(并在桌面浏览器上记录到控制台)。您还可以记录更详细的信息以在adb logcat中查看(例如正在访问的键!)

请参阅此stackoverflow问题以获取有关Storage事件的更多详细信息。


谢谢Leon。这是我的错,我没有更新帖子。我尝试添加事件监听器。用户只在移动设备上使用该网站,因此没有控制台可供编写。由于监听器不会为该页面的任何事件触发,因此它并没有证明有用。我找到了一种方法来使监听器在整个站点中触发,但涉及弹出窗口,而且超出了我想让用户经历的范围。 - jmease
有一些不错的 JScript 日志工具 - 比如 log4javascript,它还允许您将日志记录到服务器(即 AjaxAppender),这可能会对调试移动问题等有所帮助... 希望能有所帮助。 - Leon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接