Iphone localStorage"QUOTA_EXCEEDED_ERR"问题

Vir*_*ren 20 iphone html5 local-storage ios

我尝试在HTML5(localStorage)中使用Client Side Storage for Iphone Application,我完全知道localStorage(目前是5MB)的" QUOTA " .

现在的问题是我的应用程序(以前没有存储数据).尝试将数据存储在localStorage中导致QUOTA_EXCEEDED_ERR,尽管整体数据的大小小于5 MB(精确到~4.5b(在普通浏览器中使用chrome web inspector找到))

任何人都可以分享一下这个数据如何称重4Kb导致QUOTA_EXCEEDED_ERR当相同5MB的上限时

请注意,问题仅发生在iPhone上,所有浏览器甚至iPhone模拟器都没有提示QUOTA_EXCEEDED_ERR错误

iPhone目前的图片是iPhone 4.

Joe*_*ssi 28

进入设置 - > Safari并检查隐私浏览是否已打开.如果是,本地存储将无法存储任何内容.以下是为您检查本地存储的一些基本代码:

if (!!window.localStorage) 
{
    localStorage.setItem(key, val);
};
Run Code Online (Sandbox Code Playgroud)

另外,你是如何设置它的?你在用localStorage.setItem(key, val)还是在尝试localStorage(key, val)?你的问题可能来自于错误设置

  • 你是对的,localStorage无法在Safari私密模式下存储任何内容,但代码片段无法用于检测这一点.即使Safari处于私有模式,`window.localStorage`也会返回一个Storage对象. (3认同)
  • ,是的,你是对的问题是在iPhone中启用了第一次隐私浏览,禁用它工作正常,但可以分享为什么在启用隐私浏览的模拟器中的相同工作以及localStorage如何在iPhone上的Gmail工作,即使私密浏览"启用",任何方式,但答案确实有效,谢谢你的帮助 (2认同)

wos*_*sis 19

我有同样的问题,JoeCortopassi只是部分正确:它是由启用私人浏览引起的.该答案中提供的代码虽然没有多大帮助.当我在iPad Safari(ios5)上测试时,我得到了

console.log(!!window.localStorage); // true
Run Code Online (Sandbox Code Playgroud)

一旦我尝试设置一个值,我就会得到一个例外:

localStorage.setItem("test", "test") // Exception 22 is thrown
Run Code Online (Sandbox Code Playgroud)

因此,要准确测试本地存储支持,必须尝试在本地存储中设置值,例如:

var localStorageSupported = function() {
  try {
    localStorage.setItem("test", "test");
    localStorage.removeItem("test");
    return true;
  } catch(e){
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)


lib*_*b3d 8

事实上,在Safari for iOS <6上使用隐私浏览模式不会清空window.localStorage,window.sessionStorage因此检查!!window.localStorage!!window.sessionStorage不够,并且从这些组件调用的任何内容都将失败,抛出此QUOTA_EXCEEDED_ERR错误.

在这些平台上,私有模式似乎将配额设置为零.这就是为什么要真正测试这些功能,就像Modernizr所做的那样,你必须将它包装在try ... catch语句中.

Modernizr代码:

var mod = 'modernizr';
/*...*/
tests['localstorage'] = function() {
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch(e) {
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

我们必须信任Web API,但要非常谨慎.