2012-01-02 10 views
21

Entrambe le affermazioni window['localStorage'] e window.localStoragestorage locale in IE9 non riesce quando il sito si accede direttamente dal file system

sono indefiniti quando si accede al "file: /// C: /index.html" url

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.

+0

HTML5 LocalStorage richiede un nome host/per funzionare. Prova ad installare localmente Apache per testare con http: // localhost/ – ChristopheCVB

risposta

23

Sì, IE9 non supporta localStorage per i file locali. Non ho trovato alcuna documentazione ufficiale che possa trovare, ma lo stesso problema è described in this blog.

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

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

Grazie, controllerò il tuo blog Ho appena trovato anche questa risposta: http://stackoverflow.com/questions/3392032/using-localstorage-in- ie9-preview – DevNull

+0

Sì, sono inciampato anche in una domanda simile. [Vedi link aggiornati]. Scusate! – benesch

+0

Credo che WebDB, WebStorage e IndexDB abbiano lo stesso problema Ora si è un'alternativa a localStorage che funzionerà con file: //? – DevNull

1

Ho lo stesso problema e ha trovato due plugin con soluzioni di ripiego:

https://github.com/andris9/jStorage

HTML5 Local Storage fallback solutions

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

+0

funziona jstorage quando viene utilizzato su un file locale, non uno su un server? Ad esempio, se ho un file in C: \ test che utilizza jstorage, jstorage funzionerà con IE9? Vedi la mia domanda su http://stackoverflow.com/q/24210706/2658159. –

5

Come bonus aggiuntivo, IE eliminerà ogni tentativo di aggirare questo problema.

La cosa sensata da fare sarebbe quella di spegnere il proprio localStorage manichino in modo che almeno la vostra cosa non si rompe durante il caricamento dal file system locale:

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

Qualche ipotesi su ciò che alert (window.localStorage) comparirà dopo aver eseguito quello? 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", ci limiteremo a spostare il tutto verso qualche altra parte:

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

Così ora, ovunque che normalmente si dice localStorage [ 'fagioli'] = 7, basta fare localStorageAlias ​​['beans'] = 7 e sei di nuovo in affari.Naturalmente, IE non sarà in realtà store nulla tra le sessioni quando si esegue dal filesystem locale. Ma almeno non si romperà.

Per ulteriore credito, è possibile correggere il codice sopra riportato per scambiare in qualche forma di archiviazione persistente che IE in realtà utilizza durante l'esecuzione locale.

+1

Interessante trucco per evitare incidenti. Grazie. Ma dubito che ci siano alternative di archiviazione persistenti da scambiare. Mi piacerebbe dove. – DevNull

Problemi correlati