[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