2013-10-03 4 views
10

Ich muss benachrichtigt werden, wenn localStorage geändert wird. Dieser Code funktioniert in Firefox 24, funktioniert aber nicht in Chrome 29 (oder 30) oder in IE 10. Er funktioniert auch auf einem Live-Server, aber nicht beim Testen mit einer lokalen Datei (file:///). HierLocalStorage-Ereignis-Listener in Chrome für lokale Datei nicht ausgelöst

ist der Code:

<!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> 

Was ist das Problem mit diesem in Chrome? Ich öffne zwei Tabs wie erforderlich.

Antwort

11

Es wird nur das Ereignis in den "anderen" Tabs/Fenstern ausgelöst, aber nicht in dem, das die Daten ändert (dies ist in Ihrer Frage etwas unklar, also korrigieren Sie mich, wenn ich falsch verstanden habe).

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

aktualisieren die Antwort vervollständigen basierend auf Kommentare:

Es wird in einigen Browsern Einschränkungen, wenn die Seite aus dem Dateiprotokoll (file:///) aus Sicherheitsgründen läuft .

In Chrome können Sie dies umgehen, indem das Argument --allow-file-access-from-files Versorgung:

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

Ich bin nicht sicher, wenn Sie etwas ähnliches mit anderen Browsern tun. Ich würde empfehlen, mit einem lokalen Server (z. B. Mongoose) zu testen, um keine Überraschungen in einem Live-Szenario zu begegnen.

+0

Ich lese Spezifikation von W3C, ich glaube, ich verstehe es, mein Problem ist, ich öffne zwei Tab, in Tab2, änderte ich den Wert von localStorage, aber Tab1 haben keine passieren. Hast du Chrome Version 29 getestet? –

+0

@TrungHuynh bitte stellen Sie eine Geige zur Verfügung, mit der ich testen kann. – K3N

+0

Hier ist es! http://jsfiddle.net/4ftxj/! Aber es braucht zwei Registerkarten für die Ausführung vollständig, weil die Spezifikation folgen, kann es nicht auf der Registerkarte hören, die localStorage ändern. –

Verwandte Themen