Suj*_*hen 7 javascript android google-chrome local-storage sentry
我用哨兵跟踪网站中的错误。问题是,有时适用于Android的chrome移动版的nullStorage为空,这会导致所有相关方法(如getItem或setItem)都将产生错误(是的,很脆弱)。您以前遇到过这样的问题吗?我想知道这个问题的最佳解决方案。
谢谢 :)
也许是因为这个问题已经有近 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);
}
Run Code Online (Sandbox Code Playgroud)