4 Stimmen

Strategien zur Erhaltung von Formulardaten (beim Schließen von Tabs/Browsern)

Ich habe ein Problem mit einer Aufgabenverwaltungsanwendung, bei der es vorkommt, dass Benutzer ihre Browser/Tabs schließen und die von ihnen eingegebenen Informationen verloren gehen, weil sie versehentlich einen Browser/Tab schließen, was zum Verlust des eingegebenen Textes führt (und einige können eine halbe Stunde mit der Eingabe von Text verbringen).

Also muss ich eine Lösung anbieten, ich habe ein paar Ideen, wollte aber wissen, welche die beste ist, oder wenn Sie eine bessere Lösung haben, lassen Sie es mich wissen.

Option 1:

  • Auf der window.onunload oder möglicherweise window.onbeforeunload Ereignis einen confirm()-Dialog aufrufen und zunächst testen, ob der Aufgabenprotokollbereich Text enthält und nicht leer ist. Wenn er nicht leer ist, rufen Sie window.confirm() und fragen, ob der Benutzer die Registerkarte/das Fenster schließen möchte, ohne ein Protokoll zu speichern.

Bei Option 1 habe ich die Befürchtung, dass sie für den Benutzer zu aufdringlich sein könnte.

Option 2:

  • Rufen Sie bei demselben Ereignis kein confirm() auf, sondern speichern Sie stattdessen den Text im Aufgabenprotokollbereich zwangsweise in einem Cookie. Bieten Sie dann möglicherweise eine Schaltfläche an, die versucht, gespeicherte Aufgabeninformationen aus dem Cookie auf derselben Seite wiederherzustellen, so dass ein Klick auf diese Schaltfläche die Cookies analysiert und die Informationen abruft.

0 Stimmen

Was bedeutet "aufdringlich"?

0 Stimmen

Nun, Sie wissen ja, wie lästig Benachrichtigungs- und Bestätigungsfenster sind, aber dies könnte die einzige Ausnahme von dieser Regel sein? Ich weiß es nicht.

0 Stimmen

Wenn sie die Dinge "richtig" machen, gibt es keinen Dialog, richtig? Wenn sie etwas eintippen, vergessen zu speichern und ihre Arbeit verlieren, ist das schlecht, richtig? Was ist falsch daran, sie zu fragen, ob sie ungespeicherte Änderungen behalten oder ignorieren wollen?

6voto

JonoW Punkte 13361

Das Ereignis window.onbeforeunload funktioniert ein wenig seltsam. Wenn Sie einen Handler dafür definieren, zeigt der Browser eine allgemeine Meldung über den Verlust von Daten an, indem er von der Seite weg navigiert, wobei der String, den Sie von der Handler-Funktion zurückgeben, in die Mitte der Meldung eingefügt wird. Siehe hier:

Alt-Text http://img291.imageshack.us/img291/8724/windowonbeforeunload.png

Was wir also tun: Wenn wir wissen, dass etwas auf der Seite ungespeichert ist, setzen wir:

window.onbeforeunload = function(){
 return "[SOME CUSTOM MESSAGE FROM THE APP]";
}

und sobald der Benutzer speichert und wir wissen, dass wir ihm die Nachricht nicht mehr zeigen müssen, setzen wir:

window.onbeforeunload = null;

Es ist zwar ein wenig aufdringlich, aber besser, als wenn Ihre Benutzer versehentlich Daten verlieren.

2voto

noctonura Punkte 12103

Ich würde AJAX-Frameworks für den jeweiligen Webserver/die jeweilige Sprache, die Sie verwenden, untersuchen. AJAX würde es Ihnen ermöglichen, Formulardaten zu speichern, während sie eingegeben werden (so funktioniert beispielsweise Google Docs).

0 Stimmen

Ich weiß, wie dies zu tun, aber ich glaube, es würde stark den Server verstopfen - ich meine Bindung ein keyup-Ereignis für Dutzende von Benutzern und Senden einer Ajax-Anfrage alle paar Sekunden für jeden Benutzer?

1 Stimmen

Sie müssen das nicht beim Einschalten tun, sondern können es auch beim Verwischen tun. Das impliziert zumindest, dass der Benutzer seine Arbeit in diesem bestimmten Feld beendet hat und dass es sich lohnt, es zu speichern.

0 Stimmen

Richtig vielleicht ist "Wie es geschrieben steht" zu viel. Wenn Sie es auf einem Timer alle 60 Sekunden, alle 5 Minuten, usw., wenn und nur wenn der Text geändert hat, das könnte auch für Ihr Szenario funktionieren.

2voto

cjk Punkte 44394

Wenn der Benutzer so dumm ist, weg zu navigieren, bevor er das, was er getan hat, abschickt, dann sollte er sich nicht daran stören, dass er gefragt wird, ob er etwas tun will, was offensichtlich dumm ist.

Außerdem verwendet SO einen Bestätigungsdialog, wenn man wegfährt, und die meisten (einige) Benutzer hier sind ziemlich schlau.

Dies ist am einfachsten zu handhaben und hilft den Nutzern wahrscheinlich mehr.

Wenn jemand einen langen Text schreibt und dann den Browser schließt, ohne ihn abzuschicken, ist er vielleicht lieber bereit, das Problem an Ort und Stelle zu lösen, als am nächsten Morgen festzustellen, dass er es nicht getan hat...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X