el almacenamiento local en IE9 falla cuando se accede al sitio web directamente desde el sistema de archivos

Ambas declaraciones window['localStorage'] y window.localStorage

no están definidos al acceder a la url “archivo: /// C: /index.html”

¿LocalStorage está fuera de los límites cuando se ejecutan sitios web en el sistema de archivos?

PD. Estoy ejecutando el sitio web en un teléfono con Windows 7 que aloja el sitio web en isolatedStorage.

Sí, IE9 no admite localStorage para archivos locales. No en ninguna documentación oficial que pueda encontrar, pero el mismo problema se describe en este blog .

Tendrá que alojar el sitio web externamente o buscar algún otro método de datos persistentes. [La compatibilidad con el almacenamiento local estilo HTML5 está todavía en beta en muchos navegadores, de todos modos. Especialmente para páginas en el sistema de archivos local.]

Podría intentar comportamientos de datos de usuario, que es una solución anterior al W3C desarrollada por Microsoft para Internet Explorer. Sin embargo, no estoy seguro si es compatible con los sistemas de archivos locales. Campo de golf:

  1. http://www.javascriptkit.com/javatutors/domstorage2.shtml
  2. http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx

Referencias

  1. https://bugzilla.mozilla.org/show_bug.cgi?id=507361
  2. https://stackoverflow.com/a/7377302/1122351

Como una ventaja adicional, IE reducirá cualquier bash de solucionar este problema.

Lo más sensato sería anular tu propio almacenamiento local ficticio para que al menos tu cosa no se rompa al cargarlo desde el FileSystem local:

 if (document.all && !window.localStorage) { window.localStorage = {}; window.localStorage.removeItem = function () { }; } 

¿Alguna adivinación sobre qué alerta (window.localStorage) aparecerá después de ejecutar eso? ¿Adivinaste “indefinido”?

Gracias, IE! Ahora hay un truco feo que podemos hacer para que esto funcione. Como IE no te permitirá reutilizar su palabra reservada “localStorage”, simplemente pasaremos todo a otro lugar:

 window.localStorageAlias = window.localStorage; if (document.all && !window.localStorage) { window.localStorageAlias = {}; window.localStorageAlias.removeItem = function () { }; } 

Entonces, en cualquier lugar, normalmente dirías localStorage [‘beans’] = 7, simplemente haces localStorageAlias ​​[‘beans’] = 7 y vuelves a estar en el negocio. Naturalmente, IE no almacenará nada allí entre sesiones cuando se ejecuta desde el sistema de archivos local. Pero al menos no se romperá.

Para obtener más crédito, puede corregir el código anterior para intercambiar en alguna forma de almacenamiento persistente que IE realmente usará cuando se ejecute localmente.

Tengo el mismo problema y encontré dos complementos con soluciones de respaldo:

https://github.com/andris9/jStorage

Soluciones de respaldo de almacenamiento local HTML5

Me gusta el primero porque es más pequeño y simple.