iPhone本地存储“QUOTA_EXCEEDED_ERR”的问题

我尝试使用Iphone应用程序的HTML5(localStorage)中提供的客户端存储,我完全意识到与localStorage关联的“ QUOTA ”(当前为5MB )。

现在的问题是我的应用程序(没有数据以前存储)。 试图将数据存储在localStorage中会导致QUOTA_EXCEEDED_ERR,尽pipe总体数据的大小小于5 MB(精确到〜4Kb) (在普通浏览器中使用chrome web inspector可以find)

任何人都可以分享一些这样的数据如何重量4Kb导致QUOTA_EXCEEDED_ERR当上限为相同的5MB

请注意,问题只发生在iPhone所有的浏览器 ,甚至iPhone模拟器不会提示QUOTA_EXCEEDED_ERR错误

目前iPhone的图片是iPhone 4。

进入设置 – > Safari并检查是否隐私浏览。 如果是,本地存储将无法存储任何东西。 这里有一些基本的代码来检查本地存储:

if (!!window.localStorage) { localStorage.setItem(key, val); }; 

另外,你怎么设置它? 你使用localStorage.setItem(key, val) ,还是尝试localStorage(key, val) ? 你的问题可能来自不正确的设置

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

 console.log(!!window.localStorage); // true 

只要我尝试设置一个值,我得到一个exception:

 localStorage.setItem("test", "test") // Exception 22 is thrown 

因此,为了准确地testing本地存储支持,需要尝试在本地存储中设置一个值,例如:

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

事实上,在iOS上使用隐私浏览模式<6不会清空window.localStoragewindow.sessionStorage ,因此检查!!window.localStorage!!window.sessionStorage将是不够的,无论你从那些调用组件只会失败,抛出这个QUOTA_EXCEEDED_ERR错误。

在这些平台上,私人模式似乎将配额设定为零。 这就是为什么要真正testing这些特性,就像Modernizr一样,你必须把它包装在try … catch语句中。

Modernizr代码:

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

我们必须相信networkingAPI,但相当谨慎。

尝试在设置新值之前删除该值:

 localStorage.removeItem(key); localStorage.setItem(key, val); 

看到这个问题 ,因为它看起来相似。

本地存储配额与域绑定,如果您有其他使用数据存储的页面,则可能会填充该配额。 当你得到exception时,迭代密钥以找出存储器中有什么。

 try { // try to insert storage here } catch ( err ) { for ( var i =0; i < storage.length ; i++ ) { console.log ( storage.key( i ) ) } }