iphone ios html5 local-storage

Problema "QUOTA_EXCEEDED_ERR" de Iphone localStorage



ios html5 (5)

El hecho es que el uso del modo de navegación privada en Safari para iOS <6 no vacía window.localStorage y window.sessionStorage y, por lo tanto, comprobar !!window.localStorage o !!window.sessionStorage no será suficiente, y como quiera que llames los componentes simplemente fallarán, lanzando este error QUOTA_EXCEEDED_ERR .

En esas plataformas, el modo privado parece establecer la cuota a cero. Esa es la razón por la que, para probar realmente esas funciones, de la misma manera que lo hace Modernizr, tendrá que envolverlo en una declaración try ... catch.

Código de modernización:

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

Tenemos que confiar en las API web, pero con mucho cuidado.

Intento usar Client Side Storage disponible en HTML5 (localStorage) para la aplicación de Iphone, y estoy completamente al tanto del " QUOTA " asociado para localStorage (que actualmente es de 5MB ).

Ahora el problema es para mi aplicación (sin datos previamente almacenados). tratar de almacenar los datos en localStorage da como resultado QUOTA_EXCEEDED_ERR aunque el tamaño de los datos generales es mucho menor que 5 MB (~ 4Kb para ser precisos (se encuentra usando Chrome Web Inspector en el navegador normal))

¿Alguien puede compartir algo de luz sobre cómo un peso de datos de 4Kb da como resultado QUOTA_EXCEEDED_ERR cuando el límite superior para los mismos 5MB?

Tenga en cuenta que el problema solo se está produciendo en el iPhone , todos los navegadores e incluso el Simulador de iPhone no muestra el error QUOTA_EXCEEDED_ERR

iPhone actualmente es imagen es iPhone 4.


Intente eliminar el valor antes de establecer uno nuevo:

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

Véase también esta pregunta , ya que parece similar.


La cuota de almacenamiento local está vinculada al dominio, si tiene otras páginas que utilizan el almacenamiento de datos, pueden completarla. Iterar las claves para averiguar qué hay en el almacenamiento cuando se obtiene la excepción.

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


Tuve el mismo problema y JoeCortopassi solo tiene razón en parte: se debe a que la navegación privada está habilitada. Sin embargo, el código provisto en esa respuesta no ayuda mucho. Cuando lo probé en iPad Safari (ios5) obtuve

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

Tan pronto como intento establecer un valor, obtengo una excepción:

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

Por lo tanto, para probar con precisión el soporte de almacenamiento local, es necesario intentar establecer un valor en el almacenamiento local, por ejemplo:

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


Vaya a Configuración-> Safari y verifique si la navegación privada está activada. Si es así, el almacenamiento local no podrá almacenar nada. Aquí hay un código básico para comprobar el almacenamiento local para usted:

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

Además, ¿cómo lo estás configurando? ¿Está utilizando localStorage.setItem(key, val) o está intentando localStorage(key, val) ? Tu problema podría estar viniendo de configurarlo incorrectamente