2010-08-25 5 views
10

Ho provato a seguire the examples on the Safari Developer Site.Come posso attivare un evento ogni volta che localStorage viene aggiornato in Safari 5+?

La documentazione suggerisce di aggiungere un listener di eventi in questo modo:

window.addEventListener('storage', storage_handler, false); 

e quindi impostando la funzione del gestore in questo modo:

function storage_handler(evt) 
{ 
    alert('The modified key was '+evt.key); 
    alert('The original value was '+evt.oldValue); 
    alert('The new value is '+evt.newValue); 
    alert('The URL of the page that made the change was '+evt.url); 
    alert('The window where the change was made was '+evt.source); 
} 

Ma io non riesco a ottenere il codice per lavorare su la mia macchina (OS X 10.6, Safari 5.01) né su Safari sul mio iPhone 3GS (iOS 4.02).

This article offre un metodo separato:

window.onload = function() { 
    ... 
    document.body.setAttribute("onstorage", "handleOnStorage();"); 
} 

function handleOnStorage() { 
    if (window.event && window.event.key.indexOf("index::") == 0){ 
     $("stats").innerHTML = ""; 
     displayStats(); 
    } 
} 

ma non ho avuto fortuna con che o.

Sto facendo qualcosa di sbagliato? è un insetto?

+1

ho fissato i link nella tua domanda per voi; dovresti essere in grado di aggiungere più link presto, una volta che ottieni un po 'più di ripetizioni. Purtroppo non conosco la risposta alla tua domanda. Spero che qualcun altro possa aiutarti! –

+0

Una buona demo con il suo frammento di codice è già disponibile [qui] (http://html5demos.com/storage-events) che aiuta a capire il concetto e come funziona. http://html5demos.com/storage-events – msoliman

+0

hai ancora questo link che potrebbe aiutare anche a capire sessionStorage molto bene https://www.nczonline.net/blog/2009/07/21/introduction-to-sessionstorage/ – msoliman

risposta

19

Dopo aver esaminato ulteriormente (e con l'aiuto di un amico) ho scoperto che il metodo storage_handler è chiamato non quando il valore di un valore di memoria locale cambia nella pagina nella mia finestra o scheda attuale, ma quando cambia in un'altra scheda .

Ad esempio, se ho le due schede aperte e ho controlli nelle pagine in ogni scheda per modificare le impostazioni di memoria locale, quando colpisco il controllo nella prima scheda, il metodo storage_handler viene chiamato nell'altra scheda.

+0

Hai trovato una fonte affidabile? Potresti fornirci? Non ho potuto dedurre quello dalla specifica https://www.w3.org/TR/webstorage/#sessionStorageEvent. In ogni caso, sto riscontrando problemi nell'interpretazione, in particolare nella sezione in cui viene menzionato un documento "completamente attivo". – leods92

2

Se si desidera eseguire un'azione dopo che gli oggetti sono stati salvati in localstorage sulla stessa pagina, è possibile chiamare manualmente la funzione dopo aver chiamato localStorage.setItem e richiamare la stessa funzione dal listener di eventi storage per gestire più schede.

0

Mi rendo conto che si tratta di Safari ma, secondo la Mozilla Developer Network, StorageEvent viene attivato solo se l'oggetto di archiviazione Web viene modificato da una pagina esterna, ad esempio in un'altra scheda.

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

Scorrere fino a "Rispondere ai cambiamenti di storage con lo StorageEvent".

(avrei aggiunto questo come un commento alla risposta accettato, ma non ho il rappresentante per questo.)

Problemi correlati