chrome mobile android中的localStorage为空

Posted

技术标签:

【中文标题】chrome mobile android中的localStorage为空【英文标题】:localStorage is null in chrome mobile android 【发布时间】:2018-03-31 16:49:12 【问题描述】:

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

谢谢:)

【问题讨论】:

当您在没有 localStorage 的环境中键入“localStorage.setItem / getItem”时,您希望发生什么?您是否希望它继续就好像它工作了,即使它什么都不做? 你可以试试这个 polyfill here -- 它会让 localStorage 在单个页面上工作,但不会像普通的 localStorage 那样永久存储数据 - 值将不复存在一旦用户离开该页面。 很好的@TKoL 谢谢你的回答! 【参考方案1】:

也许是因为这个问题已经有将近 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);

【讨论】:

以上是关于chrome mobile android中的localStorage为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用chrome devtool调试Mobile网页?

Chrome Mobile,更改系统导航栏(返回、主页、最近按钮)背景颜色?

jQuery Mobile 无法在 Android 设备上动态更改图像

在 Safari 和 Mobile Chrome 上以编程方式播放有声视频

Chrome Android 只考虑一个媒体查询

用于 Android 远程调试的 Google Chrome -“localhost:9222”不可用