2015-08-27 10 views
23

Sto lavorando a un'applicazione Web ospitata in Azure. L'ho provato su MS Edge (build 20.10525.0.0) e ho avuto il seguente problema.Microsoft Edge: l'archiviazione locale/di sessione non funziona in una nuova scheda

Ho un collegamento con il target _blank per aprire in una nuova scheda una pagina. Nell'evento click di questo collegamento, memorizzo alcuni dati nella memoria di sessione. La nuova pagina sta recuperando i dati per visualizzarli. Questo funziona bene sotto Chrome, Firefox, IE 9-10-11.

Sotto Bordo, la memoria sembra funzionare correttamente. Pensiero, il recupero non funziona sempre. A volte, il primo tentativo funziona. A volte, restituisce null.

Ho provato a utilizzare la memoria locale anziché la memoria di sessione. Ho anche provato a usare window.open al target _blank. Entrambe queste soluzioni non funzionano.

Qualcuno ha idee?

+3

Sfortunatamente, qualcosa è davvero sbagliato con localStorage nel nuovo Microsoft Edge. Mi sono imbattuto nel problema simile e sembra che questa demo piuttosto semplice http://html5demos.com/storage-events funzioni ovunque tranne Edge. Mi chiedo perché questo non è stato ancora pubblicato. – ConstantineUA

+3

Ho creato un bug di MS Edge per questo: https://connect.microsoft.com/IE/feedbackdetail/view/1798743/localstorage-bug – Buzinas

+0

@Buzinas, eventuali aggiornamenti su questo? è ora settembre 2017 e sul mio Edge 38.14393 non riesco ancora a ricevere un evento di archiviazione quando in un ifram viene modificato localStroge. – user2520818

risposta

3

Ho avuto lo stesso problema con localStorage su più schede: funzionava solo a intermittenza, o non funzionava affatto. La mia soluzione era passare a window.indexedDB (vedi docs on MDN) che funziona perfettamente con IE10, IE11 e MS Edge (testato su Edge v20.10240).

0

Se la finestra di una finestra B ha creato allora l'evento di archiviazione ottiene innescare

provare con questo codice

creare un file chiamato a.htm e aggiungere questo script in

(function() { 
    function write(s) { 
     var d = document.createElement('div'); 
     d.innerHTML = s; 
     document.body.appendChild(d); 
    } 

    var w = window.open('','window_b'); 
    if (w.location.host === '') { 
     w.location.href = 'http://localhost/b.htm'; 
    } 

    if (window.localStorage) { 
     setInterval(function() { 
      var now = (new Date()).toTimeString(); 
      localStorage.removeItem('date'); 
      localStorage.setItem('date', now); 
      write('fired on ' + now); 
     }, 3000); 
    } 
    else { 
     write('local storage not detected!'); 
    } 
})(); 

creare un file chiamato b.htm e aggiungi questo script

(function() { 
    function write(s) { 
     var d = document.createElement('div'); 
     d.innerHTML = s; 
     document.body.appendChild(d); 
    } 

    window.addEventListener('storage', function(e) { 
     e.newValue && write('received ' + e.newValue); 
    }); 

})(); 

quindi passare a un .htm

0

utilizza localStorage invece di sessionStorage. Funzionerà.