2013-10-03 14 views
10

Devo ricevere una notifica quando viene modificato localStorage. Questo codice funziona bene in Firefox 24, ma non funziona in Chrome 29 (o 30) o in IE 10. Funziona anche su un server live, ma non quando sto testando utilizzando un file locale (file:///).Il listener di eventi localStorage non viene attivato in Chrome per il file locale

Ecco il codice:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Index</title> 
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#submit').click(function() { 
       console.log('Clicked'); 
       if($('#username').val() != "") 
        localStorage.setItem('someItem', 'someValue'); 
      }); 
      $(window).bind('storage', function(e) { 
       alert('change'); 
      }); 


     }); 
    </script> 
</head> 
<body> 
<input type="text" id="username" name="username" value="" /> 
<a href="#" id="submit">Click me</a> 
<p id="result"></p> 
</body> 
</html> 

Qual è il problema con questo in Chrome? Sto aprendo due schede come richiesto.

risposta

11

Spara solo l'evento nelle "altre" schede/finestre ma non in quello che cambia i dati (questo è un po 'oscuro nella tua domanda quindi per favore correggimi se ho frainteso).

When the setItem(), removeItem(), and clear() methods are called on a Storage object x that is associated with a local storage area, if the methods did something, then in every Document object whose Window object's localStorage attribute's Storage object is associated with the same storage area, other than x, a storage event must be fired, as described below.

Source W3C

Aggiornamento per completare la risposta sulla base di commenti:

Ci saranno restrizioni in alcuni browser se la pagina è in funzione dal protocollo di file (file:///) per motivi di sicurezza .

In Chrome è possibile ignorare questa fornendo l'argomento --allow-file-access-from-files:

chrome.exe --allow-file-access-from-files 

io non sono sicuro se si può fare qualcosa di simile con altri browser. Consiglierei di provare con un server locale (ad esempio, ad esempio Mongoose) per non incorrere in sorprese in uno scenario live.

+0

Ho letto le specifiche del W3C, penso di averlo capito, il mio problema è di aprire due schede, in tab2, ho cambiato il valore di localStorage, ma tab1 non si è verificato. Hai provato su Chrome versione 29? –

+0

@TrungHuynh si prega di fornire un violino che posso testare con. – K3N

+0

Eccolo! http://jsfiddle.net/4ftxj/! Ma ha bisogno di due schede per eseguire completamente, perché seguire le specifiche, non può ascoltare sulla scheda che cambia localStorage. –

Problemi correlati