2012-01-02 18 views
21

Ambas declaraciones window['localStorage'] y window.localStoragealmacenamiento local en IE9 falla cuando la página web se accede directamente desde el sistema de archivos

no están definidos cuando se accede a la "file: /// C: /index.html" url

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

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

+0

HTML5 LocalStorage necesita un nombre de host/para funcionar. Intenta instalar apache localmente para probar con http: // localhost/ – ChristopheCVB

Respuesta

23

Sí, IE9 no admite localStorage para archivos locales. No en ninguna documentación oficial que pueda encontrar, pero el mismo problema es described in this blog.

Deberá alojar el sitio web externamente o buscar 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.]

Puede probar 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. Enlaces:

  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
+0

Gracias, veré tu blog Acabo de encontrar esta respuesta también: http://stackoverflow.com/questions/3392032/using-localstorage-in- ie9-preview – DevNull

+0

Sí, tropecé con una pregunta similar también. [Ver enlaces actualizados]. ¡Lo siento! – benesch

+0

Creo que WebDB, WebStorage e IndexDB tienen el mismo problema ¿Ahora tiene una alternativa a localStorage que funcionará con file: //? – DevNull

1

Tengo el mismo problema y encontré dos plugins con otras soluciones de contingencia:

https://github.com/andris9/jStorage

HTML5 Local Storage fallback solutions

me gusta la primera de ellas más porque es más pequeño y más simple.

+0

Cómo funciona jstorage cuando se usa en un archivo local, no en un servidor? Por ejemplo, si tengo un archivo en C: \ test que usa jstorage, ¿funcionará jstorage con IE9? Vea mi pregunta en http://stackoverflow.com/q/24210706/2658159. –

5

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

Lo cuerdo a hacer sería apagar su propio localStorage ficticio para que al menos su cosa no se rompe cuando se cargan desde el sistema de archivos local:

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

Cualquier conjetura en cuanto a lo 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. Desde el IE no le permitirá volver a utilizar su palabra reservada "localStorage", sólo tendremos que mover todo el asunto a otro lugar:

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

Así que ahora, en cualquier lugar que normalmente diría localStorage [ 'granos'] = 7, simplemente haz localStorageAlias ​​['beans'] = 7 y vuelves a estar en el negocio.Naturalmente, IE no incluirá en realidad tienda nada allí entre sesiones cuando se ejecuta desde el sistema de archivos local. Pero al menos no se romperá.

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

+1

pirateo interesante para evitar accidentes. Gracias. Pero dudo que haya alternativas de almacenamiento persistentes para ser intercambiadas. Me gustaría saber dónde. – DevNull

Cuestiones relacionadas