localStorage 在 Chrome 移动 Android 中为空

问题描述 投票:0回答:1

我使用 Sentry 来跟踪我网站中的错误。问题是有时 Android 版 chrome mobile 的 localStorage 为空,导致所有相关方法(例如 getItem 或 setItem)都会产生错误(是的,它很不稳定)。您以前遇到过这样的问题吗?我想知道这个问题的最佳解决方案。

谢谢:)

javascript android google-chrome local-storage sentry
1个回答
0
投票

也许是因为这个问题已经有近 2 年历史了,而且他们已经改变了一些东西,但 localStorage 肯定可以在 Android Chrome 中通过 localStorage.setItem() 和 getItem() 调用工作。 不需要polyfill。

但是,如果您已经将页面放在那里并添加与 Chrome 缓存行为相关的 localStorage,则会出现问题/挑战。这就是我遇到的问题。

我在网络上有一个页面,通过 JavaScript 做了一些事情。然后我添加了简单的 localStorage 调用来写入和读取字符串值。我发现localStorage会失败。
最后,我直接在 Android chrome 浏览器中加载 .js 文件,并看到 JS 是该文件的缓存版本。

我重新加载了 JS 文件并在 Android Chrome 中看到它更新了,所以我返回到使用 JS 文件的页面,它仍然没有保存到 localStorage。

为了让它工作,我必须完全关闭 Android Chrome(刷新 JS 文件后),最后 localStorage 确实工作了。

这是一个 plunkr,您可以将移动设备指向并在 localStorage 中保存一个值,以向自己证明它有效。

http://plnkr.co/edit/dWgfh5WuMcM3InR0OaN4?p=info

输入屏幕名称并按“保存”按钮:

然后您可以再次停止并运行 plunkr,您将看到您的屏幕名称已保存到 localStorage 并从 localStorage 中读出以填充顶部消息:

我实际上已经在各种版本的 Android、iOS(在 iPad 上)和各种桌面浏览器上对此进行了测试,它在每种情况下都有效。

这是调用 localStorage.setItem() 的代码

function writeScreeNameToStorage(screenName){
    var encodedScreenName = getEncodedValue(screenName);
    localStorage.setItem("screenName", encodedScreenName);
}
© www.soinside.com 2019 - 2024. All rights reserved.