Can I pop up a confirmation dialog when the user is closing the window in Safari/Chrome?
Asked Answered
D

4

6

In IE and FF, i can attach an event handler to onBeforeUnload, and by passing a string to a property of the event, the user will see a dialog asking him whether he wants to continue with the "unloading" (either closing the window or navigating away).

Safari and Chrome don't support onBeforeUnload, and onUnload seems to be too late. Is there some way to replicate the same functionality in Safari/Chrome?

NOTE: I'm not trying to keep the user hostage. I know this is nagging and un-cool. In fact, my site goes to great lengths to let the user go freely, and have everything in its place when they come back. However, I am hosting other sites inside IFrames, and sometimes these decide to get rid of me and take over the browser, which is what I'm trying to avoid.

Thanks!

Drench answered 29/4, 2009 at 19:27 Comment(2)
Note that it's generally considered rude to display other people's sites in your own frames, and there was a huge outcry when Digg recently did just that.Carmencita
I know, and thanks for the suggestion. However, we do have a VERY different target than Digg, and (we believe at least) we have a good reason to do this, it does provide some real functionality.Drench
M
7

This works perfectly for me in both Chrome and Safari:

<html><body><p>Test</p>
<script>window.onbeforeunload = function() { return "Sure?"; }</script>
</body></html>

When I try to close the window, I get the prompt.

Matted answered 29/4, 2009 at 20:0 Comment(4)
Hmmmmmmm. That's weird... My code wasn't working in Safari. Maybe it's because I was using Prototype's Event.observe() to attach the handler... Anyways, thanks a lot! You just made my life so much easier!Drench
@Matted Can I call the parent window to refresh when closing the child using this method? or can I let this call another js function instead of confirmation ?Mechelle
@raym0nd: The onbeforeunload handler has a bunch of restrictions on what it can do. I'm not exactly sure what thay are, and they're likely to vary between browsers. You should test it, but I would be doubtful that it would work everywhere, now and in the future.Matted
The key part of this which I missed initially is returning a string value. In Chrome simply 'function() { alert('Sure?'); }' will not work.Estimable
C
2

StackOverflow itself uses onbeforeunload, and it works fine for me in Safari:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null}
Carmencita answered 29/4, 2009 at 20:23 Comment(0)
C
2

I checked it in chrome and it seems to be working fine using this:

<body onunload="alert('x');" onbeforeunload="test1();">
Charters answered 9/12, 2010 at 14:2 Comment(1)
The original question says that onUnload seems to be too late.Figurant
G
1

This question is covered in slightly more detail in another newer StackOverFlow question: Setting onbeforeunload on body element in Chrome and IE using jQuery

Gabriella answered 18/10, 2011 at 18:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.