为啥 localStorage 不保留在 Chrome 中?

Posted

技术标签:

【中文标题】为啥 localStorage 不保留在 Chrome 中?【英文标题】:Why isn't localStorage persisting in Chrome?为什么 localStorage 不保留在 Chrome 中? 【发布时间】:2012-10-28 20:50:02 【问题描述】:

我正在尝试通过以下代码学习如何使用 localStorage js 对象。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function saveStuff() 
    sessionStorage.setItem('sessionKey', 'sessionValue');
    localStorage.setItem('localKey', 'localValue');

</script>
</head>
<body>
<button type="button" onclick="saveStuff()">Save</button>
</body>
</html>

我知道这并不总是适用于 file:/// 所以我使用猫鼬来提供它。当我单击保存按钮时,Chrome 的 JavaScript 控制台中的结果对我来说是正确的。但是,当我按下刷新时,本地存储和会话存储都会被清除,而我期望本地存储值会持续存在。这发生在http://127.0.0.1/http://localhost/ 上。

有谁知道为什么会发生这种情况?在设置,内容设置中,我选择了“允许设置本地数据(推荐)”并取消选中“阻止第三方 cookie 和站点数据”。我的代码中是否缺少某些内容?

(Chrome 版本 23.0.1271.64 m)

【问题讨论】:

这个小提琴有用吗? jsfiddle.net/6bvjD当你点击“保存”然后重新加载页面时,我确实获得了存储的值。 好吧。是的,它确实。这意味着为了使保存的值持续存在,必须尝试读取它?这对我来说毫无意义。 确定你没有打电话给localStorage.clear()localStorage.removeItem吗? 100%。在下面的答案中使用确切的页面会产生我预期的行为:当我重新加载页面时,两个变量仍然存在,而当我关闭并重新打开时,只有 local 仍然存在。 Bizzaro @ chrome,但感谢您的帮助! 我可以在 chrome 42.0.2311.135 m 上确认问题。 setItem("X","V") 之前的 localstorage.getItem("X") 允许在杀死所有 chrome 进程后检索值。如果 setItem("X","V") 发生在 getItem("X") 工作之前,只要您不终止所有 chrome 进程:在所有 chrome 进程终止后,本地存储密钥“X”丢失.. 【参考方案1】:

&lt;!-- Necro post I know, but maybe it helps someone else --&gt;

我不明白为什么我在开发工具中的localStorage 中看不到某些内容,但在控制台中输入localStorage 时却可以看到它。好吧,如果您在打开开发工具的情况下存储某些内容,您将不会看到 Application -&gt; Local Storage 为您的主机列出任何内容。当我关闭/重新打开开发工具时,我可以看到我的数据。

因此,总之,关闭/重新打开开发工具。

【讨论】:

在过去 3 个小时里一直在拔头发,试图弄清楚这一点。你的解决方案奏效了。谢谢。【参考方案2】:

好的。感谢必须去 pimvdb 解决这个问题,但这是解决方案。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function saveStuff() 
    sessionStorage.setItem('sessionKey', 'sessionValue');
    localStorage.setItem('localKey', 'localValue');

localStorage.getItem('localKey');
sessionStorage.getItem('sessionKey');
</script>
</head>
<body>
<button type="button" onclick="saveStuff()">Save</button>
</body>
</html>

总结似乎是您必须尝试读取密钥才能持久保存它。

结论:WTF。

【讨论】:

我认为这是一个错误。提出#160056。 这看起来像是 DevTools 中的一个错误。在您实际访问localStorage 或任何属性之前,资源面板中不会显示存储条目。如果您只是在页面加载时执行localStorage;,那么 DevTools 可以正常工作。 我在 console.log 中显示了值,但它仍然没有持续存在。 (铬) 我处理过这种问题并设法清理它,但我不知道我使用的方法是否正确。也就是说,我发现在 Chrome 浏览器设置和高级部分中有解决方案。在本节中,有一个处理内容设置,更深入地说,在 Cookies 部分中,有一个项目“仅在退出浏览器之前保留本地数据”(或类似内容)。在“许可”中,我命令“添加”并插入“本地主机”,因为我在本地环境中进行测试。从这个动作来看,数据的持久化符合API规则。

以上是关于为啥 localStorage 不保留在 Chrome 中?的主要内容,如果未能解决你的问题,请参考以下文章

即使在应用程序卸载后,Cordova LocalStorage 也会保留数据

在赛普拉斯的测试中保留 cookie / localStorage 会话

为啥 null 在 localStorage 中存储为字符串?

localStorage 未在 OSX 应用程序中保留(Xcode 4.3)

为啥 auth0 建议不要在 localStorage 中存储令牌?

localStorage sessionStorage cookie indexedDB