我有两个 jQuery 移动页面(#list 和 #show)。 #list 页面上有几项具有不同的 ID。如果我点击第 5 项,ID 5 将存储在 localStorage 中,我将被重定向到页面 #show
现在的问题是: 将 ID 存储在 localStorage 中是可行的,但下一页显示的不是项目 5,而是显示一个旧项目,它之前在 localStorage 中。
来自页面 #list 的脚本
localStorage.setItem("garageID", $(this).attr('id'));
window.location.replace("#show");
最佳答案
我也遇到过这个问题(不是在移动设备上:在 Chromium/linux 上)。
由于似乎没有基于回调的 API,我用超时“修复”了它,“防止”页面在 setItem
操作完成之前关闭:
localStorage.setItem(name, value);
setTimeout(function(){
// change location
}, 50);
0
的超时可能就足够了,但由于我没有找到任何规范(它可能在错误领域)并且问题没有始终如一地重现,所以我没有捕获任何机会.如果你愿意,你可以在一个循环中测试:
function setLocalStorageAndLeave(name, value, newLocation){
value = value.toString(); // to prevent infinite loops
localStorage.setItem(name, value);
(function one(){
if (localStorage.getItem(name) === value) {
window.location = newLocation;
} else {
setTimeout(one, 30);
}
})();
}
但我不知道 localStorage.getItem
返回正确值的事实如何保证它真正以永久方式写入,因为没有可中断行为的规范,我不知道如果the following part of the spec可以合法地解释为允许浏览器在离开页面时忘记转储到磁盘上:
This specification does not require that the above methods wait until the data has been physically written to disk. Only consistency in what different scripts accessing the same underlying list of key/value pairs see is required.
在您的确切情况下,解决方案可能是简单地滚动到具有给定名称的元素以避免更改页面。
关于假定错误的注释:
我没有找到也没有填写任何错误报告,因为我发现它很难重现。在我观察到的 Chromium/linux 案例中,它发生在 delete
操作中。
关于javascript - 在 localStorage 中存储变量太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139572/