Wie wird die Synchronisierung der Daten einer Webanwendung mit einem Server akzeptiert, wenn ein Benutzer das Browserfenster schließt, ohne zuvor seine Arbeit zu speichern? Ich rede entweder mit dem "X" oder sogar mit F5 oder so.So speichern Sie den Seitenstatus beim Schließen
Ein wenig Hintergrund:
Die Webapp in Frage hat ein Hauptfenster, und dann Kind Fenster, die aus dem Hauptfenster erzeugen, so dass Sandbox „Arbeit“ in den untergeordneten Fenstern erfolgen. Ich habe keine Kontrolle über diesen Aspekt der Implementierung.
Der Anwendungsfall:
Jedes Kind-Fenster kann eine ziemlich beträchtliche Menge an Informationen haben, bevor der Benutzer eingegeben entscheidet „OK“ bestehen bleiben die Daten auf dem Server zu klicken.
Dinge, die ich in Betracht gezogen habe/versucht:
- Einfache Nähe Bestätigung durch eine Zeichenfolge von einem
onbeforeunload
Ereignisbehandlungsroutine zurückkehrt, wenn es nicht gespeicherte Arbeit. (Problem: Mein Teamleiter ist nicht bereit, einen Browser-spezifischen "alert
Dialog" in der Webapp zu lassen. Laut ihm: User Experience geht das Fenster verlassen sich auf diesen hässlich aussehenden Dialog.) - AJAX Anforderung, die während des Ereignisses
onpageunload
ausgelöst wurde, das die Daten an den Server zurücksendet. (Problem: Da der XHR Rückruf nie genannt wird, finde ich einige Browser die Verbindung offen zu lassen, und dann versuchen, zufällig den Rückruf eines zukünftigen Fenster zu schießen, die geöffnet wird.) - Synchrone AJAX Anfrage während der gebrannte
onpageunload
Ereignis. (Problem: Ignorieren der Tatsache, dass Menschen, die mich selbst enthalten, dazu tendieren dies zu hassen und die Tatsache, dass es veraltet ist und in Zukunft entfernt wird ... Die Benutzeroberfläche könnte möglicherweise für eine lange Zeit auf die AJAX-Anfrage warten vollständig, vielleicht unbegrenzt, wenn sie das Internet verlieren.) - Speichern Sie den Inhalt der Seite in regelmäßigen Abständen, oder indem Sie
onchange
/onblur
/onwhateverelse
Event-Handler. : localStorage
Verwendung auf der Client-Gerät die geändertenen Felder zu halten, bis sie tatsächlich ihre Arbeit an den Server commit (Problem riesige Mengen an Codierungsaufwand im Vergleich zu den „faulen“ Implementierungen oben und unten.). (Problem: Browser-Unterstützung ... dies muss so viele Orte wie Unterstützung XHR unterstützen. Hat Client-Side-Speicher diese breite Unterstützung? Ich denke, es gibt eine kleine Lücke, wenn ich mich nicht irre.)
Vielen Dank im Voraus für Ihre Eingabe.
"Die Benutzererfahrung geht aus dem Fenster auf diesen hässlich aussehenden Dialog." Ich sehe es auf Facebook, Google Mail und anderswo. Ich vermute, dass sie umfangreichere User Experience-Tests durchgeführt haben als Ihr Teamleiter. – ceejayoz
Einverstanden. Leider hat diese Person eine Menge Pull und leider kann ich die Option 1 nicht verwenden :( – Harvtronix
Da die Optionen 2, 3 und 5 das Potenzial haben, zumindest einige Browser einzubrechen, sollten Sie zwischen den Optionen 1 und 4 wählen kann entweder die Zeit und das Geld ausgeben, um etwas zu tun, das mehr Aufwand erfordert, oder sie können sich die einfache, "hässliche" Lösung aussuchen, die den Endbenutzern vertraut ist. – BSMP