l’archiviazione locale in IE9 non riesce quando si accede al sito Web direttamente dal file system

Entrambe le window['localStorage'] istruzioni window['localStorage'] e window.localStorage

non sono definiti quando si accede all’URL “file: /// C: /index.html”

LocalStorage è off limits quando esegue siti Web sul filesystem?

PS. Sto eseguendo il sito Web su un telefono Windows 7 che ospita il sito Web in isolateStorage.

Sì, IE9 non supporta localStorage per i file locali. Non in alcuna documentazione ufficiale che riesca a trovare, ma lo stesso problema è descritto in questo blog .

Dovrai ospitare il sito esternamente o trovare qualche altro metodo per conservare i dati. [Il supporto per lo storage locale in stile HTML5 è ancora in beta in molti browser, comunque. Soprattutto per le pagine sul filesystem locale.]

Potresti provare i comportamenti userdata, che è una soluzione pre-W3C sviluppata da Microsoft per Internet Explorer. Non sono sicuro che supporti i filesystem locali, comunque. link:

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

Riferimenti:

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

Come ulteriore vantaggio, IE eliminerà ogni tentativo di aggirare questo problema.

La cosa più sensata da fare sarebbe quella di spegnere il proprio fittizio localStorage in modo che almeno la cosa non si interrompa quando viene caricata dal FileSystem locale:

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

Qualche ipotesi su quale avviso (window.localStorage) apparirà dopo averlo eseguito? Hai indovinato “indefinito” ???

Grazie, IE! Ora c’è in realtà un brutto trucco che possiamo fare per far funzionare questo. Dal momento che IE non ti consente di riutilizzare la sua parola riservata “localStorage”, sposteremo l’intera cosa su un altro posto:

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

Quindi ora, ovunque tu diresti localStorage [‘beans’] = 7, devi solo eseguire localStorageAlias ​​[‘beans’] = 7 e sei di nuovo in affari. Naturalmente, IE non memorizzerà nulla tra le sessioni durante l’esecuzione dal filesystem locale. Ma almeno non si romperà.

Per ulteriore credito, è ansible correggere il codice sopra riportato per scambiare in qualche forma di archiviazione persistente che IE utilizzerà effettivamente quando viene eseguito localmente.

Ho lo stesso problema e ho trovato due plugin con soluzioni di fallback:

https://github.com/andris9/jStorage

Soluzioni di fallback Local Storage HTML5

Mi piace il primo di più perché è più piccolo e più semplice.