[whatwg] salvaging work while navigating away from a web app -- onunload="confirm('save before quitting?')
Ian Hickson
ian at hixie.ch
Fri Dec 12 00:55:08 PST 2008
On Sun, 16 Nov 2008, ddailey wrote:
>
> Here's the sitch: because of an extensive use of CTRL sequences in the
> interface, the user will sometimes accidentally do something like CTRL R
> (which the browser thinks is a refresh command). In a regular app, if
> users stand in jeopardy of losing all their work, the app usually warns
> them before quitting. The way I found to work around it (that used to
> work) was to use onunload="confirm('save before quitting?'). Currently,
> however, IE seems to have removed my ability to intervene before it
> erases all work. onbeforeunload=function (){ fix(everything)} doesn't
> seem to help either.
>
> So the question: how does HTML 5 currently address the issue and do
> browsers actually implement something along this line these days?
I just went ahead and specced out the 'onbeforeunload' feature that most
browsers support today that handles this case.
Basically you just need to do
onbeforeunload="if (dirty) return 'You have unsaved work. Are you sure you want to close this page?'"
...or some such.
On Mon, 17 Nov 2008, Thomas Broyer wrote:
>
> I'm not sure you can automatically save but what you can do is cancel
> the unload with a prompt.
>
> window.onbeforeunload = function() {
> return "Your unsaved changes will be lost. Are you sure you want to leave?";
> };
>
> The browser will prompt the user with the returned string. Clicking "no"
> or "cancel" (depends on the browser) will cancel the "unload". If you
> don't want the prompt, just return "undefined" (beware, returning null
> in IE6 is equivalent to returning the string "null").
>
> window.onbeforeunload = function() {
> if (unsavedChanges) {
> return "You have unsaved changes.";
> }
> // return nothing, i.e. return undefined
> };
Right.
> HTML5 is almost silent about beforeunload and unload (and many other)
> events re. their properties (cancelable in this case). unload is defined
> in DOM3-Events (as non-cancelable) but AFAICT beforeunload is not spec'd
> anywhere.
Fixed.
On Mon, 17 Nov 2008, Philipp Serafin wrote:
>
> What you can do for an "emergency save" is to fire a *synchronous* XHR during
> the unload event. This will freeze the UI but since the user was about to
> close the page anyway, this shouldn't matter much.
The other alternative is to be always saving state on the server (or in
a local database, cookie, or equivalent).
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list