ejemplos aplicaciones almacenamiento javascript html5 cross-browser local-storage

javascript - almacenamiento - aplicaciones web offline html5



¿Puede una clave de almacenamiento local HTML5 ser una cadena? (4)

La especificación requiere que las claves y los valores se establezcan y se devuelvan como un valor de tipo DOMString . DOMString se describe en [DOM Level 3 Core] [1] como:

A DOMString is a sequence of 16-bit units. IDL Definition valuetype DOMString sequence<unsigned short>;

La codificación UTF-16 fue elegida debido a su práctica generalizada en la industria. Tenga en cuenta que para HTML y XML, el conjunto de caracteres del documento (y, por lo tanto, la notación de las referencias numéricas de caracteres) se basa en UCS [ISO / IEC 10646]. Por lo tanto, una referencia de un solo carácter numérico en un documento de origen puede, en algunos casos, corresponder a dos unidades de 16 bits en un DOMString (un sustituto alto y un sustituto bajo). Para problemas relacionados con las comparaciones de cadenas, consulte Comparaciones de cadenas en el DOM.

Para Java y ECMAScript, DOMString está vinculado al tipo String porque ambos lenguajes también usan UTF-16 como su codificación.

Así que oficialmente, cualquier cadena legal de UTF-16 es legal como una clave o un valor. No obstante, no todos los puntos de código UTF-16 son un carácter legal, por lo que debe intentar evitar ciertos símbolos como "pares sustitutos", "marcas de orden de bytes" y "caracteres reservados".

Estoy trabajando en una aplicación que utilizará HTML5 localStorage. No puedo encontrar en ninguna parte si hay restricciones en la clave además del hecho de que debe ser una cadena.

Específicamente, me gustaría saber si puedo usar una URL como clave en localStorage en todos los navegadores que admiten localStorage (por ejemplo, son símbolos como :/?#._-=+@!$%^&*()[]{}|<> permitido para ser usado en la clave?).

Además: ¿qué pasa con los espacios en blanco? ¿Se permite eso en una clave de almacenamiento local en los navegadores?

Encontré este tema pero parece que solo se probaron cadenas aceptables en valores de almacenamiento local (no claves).


Pude adaptar la prueba del tema de vinculado para probar las claves también:

function run_test(lowerlimit, UPPERLIMIT) { try { if (!window.localStorage) { // I recall that in one of the older Chrome version (4), // localStorage === null return ''Localstorage is not supported''; } if (isNaN(lowerlimit) || isNaN(UPPERLIMIT) || lowerlimit > UPPERLIMIT) { return ''One of the limits is not a valid number!''; } var i = lowerlimit - 1; var character_range = []; while (++i < UPPERLIMIT) character_range.push(i); input = String.fromCharCode.apply(String, character_range); localStorage.setItem(input, input); output = localStorage.getItem(input); if (input === output) { return true; } // Uh oh, not equal! var result = []; for (i=0; i<UPPERLIMIT-lowerlimit; i++) { if (input[i] !== output[i]) { result.push(i + lowerlimit); } } return result; }catch(e){return ''Error:'' + e;} } run_test(0x20, 0xD7FF);

El resultado parece ser el mismo, al menos en Chrome. Todavía hay que probar en otros navegadores.


Sí, puedes codificar esa cadena.

pero el almacenamiento de HTML tiene un límite de tamaño.


Una prueba simple para el soporte del navegador y la validez clave podría ser:

var testKey = "test"; var value = "some value"; if(typeof(Storage)!=="undefined") { console.log("localStorage and sessionStorage support!"); console.log("About to save. Local storage is:"); console.log(localStorage); localStorage[testKey] = value; console.log("Key saved: "+ testKey); console.log(localStorage); localStorage.removeItem(testKey); //<--- key deleted here console.log("key deleted: " + testKey); console.log(localStorage); console.log("DONE ==="); } else { console.log("Sorry! No web storage support.."); }

He probado en Chrome corriendo desde la consola.

Adaptado de http://www.w3schools.com/html/html5_webstorage.asp .