Qual è il modo accettato di sincronizzare i dati di una webapp con un server quando un utente chiude la finestra del browser senza prima salvare il proprio lavoro? Sto parlando colpendo la "X" o anche premendo F5 o qualcosa del genere.Come salvare lo stato della pagina durante la chiusura
Un po 'di storia:
La webapp in questione ha una finestra principale, e poi finestre figlio, che depongono le uova dalla finestra principale, consentendo "lavoro" sandboxed da fare nelle finestre figlio. Non ho il controllo su questo aspetto dell'attuazione.
Il caso d'uso:
Ogni finestra bambino può avere una quantità abbastanza considerevole delle informazioni inserite prima che l'utente decide di fare clic su "OK" a persistere i dati sul server.
cose Ho considerato/provato:
- semplice stretta di conferma restituendo una stringa da un gestore di
onbeforeunload
evento se non c'è lavoro non salvato. (problema: il mio team guidato non è disposta a muoversi su permettendo una specifica del browser "alert
finestra di dialogo" per essere in webapp Secondo lui:. L'esperienza utente va fuori dalla finestra basandosi su quella finestra guardando brutto.) - AJAX richiesta emessa durante l'evento
onpageunload
che invia nuovamente i dati al server. (problema: dal momento che il callback XHR non viene mai chiamato, ho trovato alcuni browser lasciando il collegamento aperto, e quindi in modo casuale che tentano di sparare il richiamo di un futuro finestra che viene aperta.) - sincrono AJAX richiesta sparato durante il
onpageunload
evento. (problema: ignorare il fatto che le persone tra cui me stesso tendono a odiare fare questo e il fatto che sia deprecato e verrà rimosso in futuro ... L'interfaccia utente potrebbe potenzialmente bloccarsi per un lungo periodo di tempo in attesa della richiesta AJAX per completa, forse a tempo indeterminato se perdono internet.) - Salvare il contenuto della pagina a intervalli regolari, oppure allegando
onchange
/onblur
/onwhateverelse
gestori di eventi. : - Utilizzando
localStorage
per mantenere i campi modificati sulla macchina del cliente fino a quando non realtà impegnano il loro lavoro al server (problema di enormi quantità di codifica in testa rispetto alle altre implementazioni "pigri" sopra e sotto.). (problema: supporto browser ... questo ha bisogno di supportare tante postazioni di supporto XHR. Lo storage lato client ha quel vasto supporto? Penso che ci sia un po 'di vuoto se non mi sbaglio.)
Grazie in anticipo per il vostro contributo.
"L'esperienza utente esce dalla finestra basandosi su quella brutta finestra di dialogo." Lo vedo usato su Facebook, Gmail e altrove. Sospetto che abbiano fatto test sull'esperienza utente più estesi di quelli del tuo team. – ceejayoz
concordato. Purtroppo questo individuo ha un sacco di tiro e, ahimè, non posso usare l'opzione 1 :( – Harvtronix
Poiché le opzioni 2, 3 e 5 hanno il potenziale per irritare almeno alcuni browser, fai in modo che la tua squadra scelga tra le opzioni 1 e 4. Essi può spendere tempo e denaro per fare qualcosa che richiederà più sforzo per mantenere, oppure può scegliere la soluzione facile, 'brutta' che sarà familiare agli utenti finali – BSMP